home *** CD-ROM | disk | FTP | other *** search
- Path: news.larc.nasa.gov!amiga-request
- From: amiga-request@ab20.larc.nasa.gov (Amiga Sources/Binaries Moderator)
- Subject: v91i076: CASIO - download 16-bit samples from a Casio FZ-1 to an Amiga, Part01/01
- Reply-To: karl@sugar.hackercorp.com (Karl Lehenbauer)
- Newsgroups: comp.sources.amiga
- Message-ID: <comp.sources.amiga:v91i076@ab20.larc.nasa.gov>
- Date: 28 Mar 91 16:19:54 GMT
- Approved: tadguy@uunet.UU.NET (Tad Guy)
- X-Mail-Submissions-To: amiga@uunet.uu.net
- X-Post-Discussions-To: comp.sys.amiga.misc
-
- Submitted-by: karl@sugar.hackercorp.com (Karl Lehenbauer)
- Posting-number: Volume 91, Issue 076
- Archive-name: midi/casio/part01
-
- [ includes uuencoded executables ...tad ]
-
- Here is my program to download 16-bit samples from a Casio FZ-1 to an Amiga.
- You'll need Bill Barton's MIDI library, version 2, to make it work.
- Also to do much useful with it, you'll need a Casio FZ-1 (the kicker), and
- FZIFF, a companion program (simultaneously posted) to downconvert the 16-bit
- samples to the 8-bit Amiga IFF 8SVX format.
-
- Audiomaster, or equivalent, is also required to do some tweaking,
- see the README in the FZIFF kit for details. These requirements
- limit the potential audience of the program a good deal of course,
- but the people that do have the necessary prerequisites will be able
- to create Amiga sounds of unparalleled quality.
-
- #!/bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 1 (of 1)."
- # Contents: Makefile README casio.c casio.h casio.uu cleanup.c
- # dumpvoice.c fz1.h hilo.c hilo.uu prototypes.h timer.c
- # Wrapped by tadguy@ab20 on Thu Mar 28 11:19:52 1991
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'Makefile' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Makefile'\"
- else
- echo shar: Extracting \"'Makefile'\" \(205 characters\)
- sed "s/^X//" >'Makefile' <<'END_OF_FILE'
- Xall: casio hilo
- X
- XOFILES= casio.o timer.o
- X
- XCFLAGS= -bs
- X
- XSDBFLAGS= -g
- X
- Xcasio: $(OFILES)
- X ln $(SDBFLAGS) $(OFILES) -lhack -lc
- X
- Xdebug:
- X cc -n casio.c
- X ln +q -g casio.o -lmidi -lc
- X
- Xhilo: hilo.o
- X ln hilo.o -lc
- END_OF_FILE
- if test 205 -ne `wc -c <'Makefile'`; then
- echo shar: \"'Makefile'\" unpacked with wrong size!
- fi
- # end of 'Makefile'
- fi
- if test -f 'README' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'README'\"
- else
- echo shar: Extracting \"'README'\" \(3066 characters\)
- sed "s/^X//" >'README' <<'END_OF_FILE'
- XHere is CASIO, a primitive program to download 16-bit voices from the
- XCasio FZ-1 synthesizer to the Amiga computer.
- X
- XThis program only has a limited audience, but for those who have an
- XFZ-1 and want the ultimate in sample quality on the Amiga, it will
- Xbe a godsend.
- X
- XYou'll need Bill Barton's MIDI library, version 2.0. It's around,
- Xon Fred Fish disks, archive sites, etc. Contact me for it as a last
- Xresort.
- X
- XThe program includes the binary, CASIO, and the source code, plus a
- XMakefile for Aztec C 5.0 or later.
- X
- XTo use CASIO, get your Casio FZ-1 MIDI'ed up bidirectionally to the Amiga
- X(out-to-in and in-to-out, the Amiga needs a bidirectional link so it can
- Xack or nack the packets as it receives them)
- X
- XVerify the link with some other program that you know works.
- X
- XFinally, use the Casio front panel to select an output device of
- XMIDI, run CASIO with an argument being the filename you want
- Xwritten on the Amiga, as in "casio train_whistle", then select
- X"voice dump" on the Casio and hit "save".
- X
- XThe Casio firmware is sensitive to data errors at the wrong point in the
- Xprotocol, so if you get one, your Casio will hang and it will have
- Xto be power-cycled. Thus it's probably a good idea to save a killer
- Xvoice to disk on the Casio before trying to download it to the Amiga,
- Xjust in case.
- X
- XRemember that MIDI is pretty slow for samples, MIDI goes at 3000 bytes
- Xper sample, but the transfer format only sends 4 bits per byte, plus
- Xthere are delays for acks, so for example a 100 Kbyte sample would
- Xtake at least a couple of minutes to transfer. You should see the
- Xsame indication on the Casio you see when it is saving to disk (a moving
- Xblip), but it will move much, much slower when going to MIDI.
- X
- XTo convert the raw 16-bit data of the Casio FZ-1 over to the Amiga
- XIFF 8SVX sample format, use my FZIFF program, a companion release.
- X
- XNote that the Amiga cannot play back a sample faster than around
- X25,000 samples per second. This pretty much dictates that you use
- Xthe 18K sample rate on the Casio when sampling for the Amiga.
- X
- XMy recently posted SMUS player is particularly useful with
- Xthese samples, because you can create multisampled instruments that
- Xdo not suffer from the one-sample-per-octave and each-sample-must-be-
- Xof-exactly-the-same-length problems that the IFF 8SVX.
- X
- XThe program HILO, which is included, simply traverses a sample file
- Xyou've received from your FZ-1 and prints the highest and lowest
- Xsample values found. The highest possible value is 32767 and the
- Xlowest is -32768. If you run it and the values aren't in this
- Xvicinity, you might want to resample at a higher volume. Of course
- Xif they're exactly those values or really really close, the voulme
- Xmight be too high, resulting in distortion. If it's just close, you
- Xusually won't notice -- let your ear be the judge. This distortion
- Xusually shows up as a sort of crackling sound when played back, or when
- Xplayed back on the Amiga.
- X
- XShare and Enjoy,
- X
- XKarl Lehenbauer
- X3918 Panorama
- XMissouri City, TX 77459
- X
- XInternet/BITNET: karl@sugar.hackercorp.com
- XUsenet: uunet!sugar!karl
- X
- END_OF_FILE
- if test 3066 -ne `wc -c <'README'`; then
- echo shar: \"'README'\" unpacked with wrong size!
- fi
- # end of 'README'
- fi
- if test -f 'casio.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'casio.c'\"
- else
- echo shar: Extracting \"'casio.c'\" \(10606 characters\)
- sed "s/^X//" >'casio.c' <<'END_OF_FILE'
- X/* casio - download sample data from a casio fz-1 */
- X
- X/* Copyright (C) 1988 Hackercorp. All Rights Reserved */
- X
- X#include <libraries/dos.h>
- X#include <clib/macros.h>
- X#include <midi/midi.h>
- X#include <functions.h>
- X#include <stdio.h>
- X#include <devices/timer.h>
- X
- X#include "casio.h"
- X#include "prototypes.h"
- X
- Xchar *program_name = "casio fz1 download program";
- X
- X#define CheckMsg(m) (m->mp_MsgList.lh_Head->ln_Succ != 0)
- X
- Xextern struct timerequest *timer_request;
- X
- X/* message ids for fz-1 system exclusive messages */
- X#define OPEN_MIDI_MSG 0x70
- X#define CLOSE_MIDI_MSG 0x71
- X#define OK_MIDI_MSG 0x72
- X#define ERR_MIDI_MSG 0x73
- X#define DATA_MIDI_MSG 0x74
- X#define EFFECT_MIDI_MSG 0x76
- X#define REMOTE_MIDI_MSG 0x7f
- X
- X/* additional messages I define as responses from its_an_fz1_message */
- X#define NOT_A_FZ_MESSAGE 0
- X#define NOT_THE_REQUESTED_FZ_CHANNEL 1
- X#define DATA_ERROR 2
- X
- X/* states for the i/o loop */
- X#define WAITING_FOR_OPEN 0
- X#define READING_FZ_DATA 1
- X
- X#define MAX_RETRIES 10
- X
- X#define CAPTURE_BUFFER_SIZE 16384
- XUBYTE capture_buffer[CAPTURE_BUFFER_SIZE];
- X
- Xvoid *MidiBase = NULL;
- Xvoid *IntuitionBase = NULL;
- X
- Xstruct MDest *dest = NULL;
- Xstruct MSource *source = NULL;
- X
- Xstruct MRoute *route_a = NULL;
- Xstruct MRoute *route_b = NULL;
- X
- XUBYTE *msg; /* buffer this in case we get shut down before freeing the current message */
- X
- Xint capture_position = 0;
- X
- Xvoid midi_cleanup(void)
- X{
- X /* if (msg)
- X FreeMidiMsg(msg); */
- X
- X if (IntuitionBase)
- X CloseLibrary(IntuitionBase);
- X
- X if (dest)
- X DeleteMDest(dest);
- X if (source)
- X DeleteMSource(source);
- X
- X if (route_a)
- X DeleteMRoute(route_a);
- X if (route_b)
- X DeleteMRoute(route_b);
- X
- X if (MidiBase)
- X CloseLibrary(MidiBase);
- X}
- X
- X/* if channel is -1, any channel is ok (within FZ-1 System Exclusive message) */
- X
- X/* validate the incoming message, including all sorts of stuff about the header
- X * and anything we know specifically within the message type as well */
- X
- XUBYTE its_an_fz1_message(UBYTE *msg, int requested_channel)
- X{
- X int channel, length, expected_length;
- X struct FZ1_Message *p;
- X
- X p = (struct FZ1_Message *)msg;
- X
- X /* compare first bytes of message,
- X extract channel number and verify,
- X return function code
- X */
- X length = MidiMsgLength(msg);
- X
- X if ((p->casio_id != 0x44) || (p->fz1_id != 0x200)
- X || ((p->encoded_channel & 0xf0) != 0x70))
- X return(NOT_A_FZ_MESSAGE);
- X
- X channel = (p->encoded_channel & 0x0f);
- X if ((requested_channel != -1) && (channel != requested_channel))
- X return(NOT_THE_REQUESTED_FZ_CHANNEL);
- X
- X switch(p->command)
- X {
- X case OPEN_MIDI_MSG:
- X expected_length = 16;
- X break;
- X
- X case CLOSE_MIDI_MSG:
- X expected_length = 7;
- X break;
- X
- X case DATA_MIDI_MSG:
- X expected_length = 136;
- X if (length == expected_length && (p->body.datamsg.checksum != calc_checksum(p)))
- X {
- X fprintf(stderr,"checksum error, expected %x, saw %x\n",
- X p->body.datamsg.checksum,calc_checksum(p));
- X return(DATA_ERROR);
- X }
- X break;
- X
- X /* haven't seen any of these yet */
- X case OK_MIDI_MSG:
- X case ERR_MIDI_MSG:
- X case EFFECT_MIDI_MSG:
- X case REMOTE_MIDI_MSG:
- X panic("got a message I don't know how to handle");
- X
- X /* it wasn't a message we understood yet it had all the makings of
- X * being one, it must be garbled */
- X default:
- X return(DATA_ERROR);
- X }
- X if (length != expected_length)
- X return(DATA_ERROR);
- X
- X return(p->command);
- X}
- X
- Xvoid commune_with_fz1(struct MSource *source, struct MDest *dest, int channel, int outfd)
- X{
- X long len;
- X UBYTE *ip;
- X int command, retry_count = 0;
- X int state = WAITING_FOR_OPEN;
- X ULONG waitflags;
- X int packets_received = 0, error_count = 0, done = 0;
- X struct FZ1_Message *p;
- X
- X /* wait for a message or control-C or "done" control var to be set */
- X while ((!((waitflags = Wait(-1)) & SIGBREAKF_CTRL_C)) && !done)
- X {
- X /* if ((waitflags & SIGBREAKF_CTRL_D) && (state = READING_FZ_DATA))
- X {
- X printf("saw a ^d\n");
- X goto data_error;
- X } */
- X
- X /* while there are messages to process, process messages */
- X while (!done && (msg = GetMidiMsg(dest)))
- X {
- X /* discard all but system exclusive data - should be done
- X * by the route, check someday to see if we can find our
- X * route and change it if it isn't */
- X if (*msg != MS_SYSEX)
- X goto message_done;
- X
- X p = (struct FZ1_Message *)msg;
- X command = its_an_fz1_message((UBYTE *)p,channel);
- X
- X if (state == WAITING_FOR_OPEN)
- X {
- X if (command != OPEN_MIDI_MSG)
- X panic("out of sync - looking for 'Open' from FZ1");
- X
- X /* we need to specify a channel ID in our messages
- X * if we're not looking for a specific one, reply
- X * with the one we got in the first message */
- X if (channel == -1)
- X channel = p->encoded_channel & 0x0f;
- X state = READING_FZ_DATA;
- X dump_open(p);
- X send_fz(source,channel,OK_MIDI_MSG);
- X goto message_done;
- X }
- X
- X if (state == READING_FZ_DATA)
- X {
- X abort_timeout_timer();
- X switch(command)
- X {
- X case DATA_MIDI_MSG:
- X send_fz(source,channel,OK_MIDI_MSG);
- X start_timeout_timer();
- X packets_received++;
- X if ((packets_received % 10) == 0)
- X {
- X printf("%4d ok \r",packets_received);
- X fflush(stdout);
- X }
- X capture(p,outfd);
- X retry_count = 0;
- X break;
- X
- X case DATA_ERROR:
- X data_error:
- X send_fz(source,channel,ERR_MIDI_MSG);
- X start_timeout_timer();
- X printf("%4d err\r",packets_received);
- X fflush(stdout);
- X error_count++;
- X if (++retry_count > MAX_RETRIES)
- X panic("exceeded max retries for a packet - transfer failed");
- X break;
- X
- X /* we get this when the fz is done */
- X case CLOSE_MIDI_MSG:
- X fprintf(stderr,"casio is done\n");
- X done = 1;
- X break;
- X
- X default:
- X fprintf(stderr,"unknown command = 0x%x\n",command);
- X if (state = READING_FZ_DATA)
- X {
- X fprintf(stderr,"will try treating it as a data error\n");
- X goto data_error;
- X }
- X else
- X panic("unknown command and not in 'read' mode");
- X }
- X goto message_done;
- X }
- X
- X panic("state variable fried");
- X
- X message_done: FreeMidiMsg(msg); /* free it */
- X }
- X
- X if (CheckMsg(timer_request->tr_node.io_Message.mn_ReplyPort) &&
- X (GetMsg(timer_request->tr_node.io_Message.mn_ReplyPort)) )
- X {
- X if (state == READING_FZ_DATA)
- X {
- X send_fz(source,channel,ERR_MIDI_MSG);
- X printf("%4d tmo\r",packets_received);
- X fflush(stdout);
- X error_count++;
- X if (++retry_count > MAX_RETRIES)
- X panic("exceeded max retries for a packet - transfer failed");
- X }
- X }
- X }
- X if (capture_position != 0)
- X {
- X if (write(outfd,capture_buffer,capture_position) != capture_position)
- X perror("output file");
- X }
- X printf("total packets received %d (%d retries)\n",packets_received,error_count);
- X}
- X
- Xvoid send_fz(struct MSource *source, int channel_id, int message_id)
- X{
- X static UBYTE buf[] = {0xf0, 0x44, 0x02, 0x00, 0x70,0x00,0xf7};
- X buf[4] |= channel_id;
- X buf[5] = message_id;
- X PutMidiMsg(source,buf);
- X}
- X
- Xint calc_checksum(struct FZ1_Message *p)
- X{
- X UBYTE *ip, lownibble, hinibble;
- X int len, running_sum;
- X
- X /* I assume the message has already been validated as a Casio FZ-1
- X * data message
- X */
- X
- X ip = &p->body.datamsg.data[0];
- X
- X for (len = 0, running_sum = 0; len < 128; len++)
- X {
- X running_sum += *ip++;
- X }
- X return((0 - running_sum) & 0x7f);
- X}
- X
- Xvoid capture(struct FZ1_Message *p, int outfd)
- X{
- X UBYTE *ip, lownibble, hinibble;
- X int len;
- X
- X ip = &p->body.datamsg.data[0];
- X
- X for (len = 0; len < 64; len++)
- X {
- X lownibble = *ip++;
- X hinibble = *ip++;
- X capture_buffer[capture_position++] = (hinibble << 4) | lownibble;
- X if (capture_position >= CAPTURE_BUFFER_SIZE)
- X {
- X if (write(outfd,capture_buffer,CAPTURE_BUFFER_SIZE) != CAPTURE_BUFFER_SIZE)
- X {
- X perror("output file");
- X }
- X capture_position = 0;
- X }
- X }
- X}
- X
- Xstruct MRouteInfo myrouteinfo =
- X{
- X MMF_SYSEX,0xffff,0,0,{0},{0}
- X};
- X
- Xmain(int argc,char *argv[])
- X{
- X
- X char *sname, *dname, *filename;
- X int outfd;
- X int wanted_channel = -1;
- X
- X fprintf(stderr,"ready to talk to casio, the routes are done automatically from\n");
- X fprintf(stderr,"midi_in if it's available, else MidiIn and to MidiOut.\n");
- X fprintf(stderr,"I download and exit when done. I automatically do retries.\n");
- X fprintf(stderr,"Nonetheless, I may 'hang' when uploading. This is soft.\n");
- X fprintf(stderr,"Hit ^D to retry. Or hit ^C, I'll exit.\n");
- X fprintf(stderr,"I write to the file on the fly (every 256 packets), so watch it.\n");
- X if (argc != 2)
- X {
- X fprintf(stderr,"usage: casio filename, routes are automatic, then\n");
- X fprintf(stderr," select FZ output device as 'midi' and do a voice save\n");
- X exit(1);
- X }
- X
- X sname = "FZ1out";
- X dname = "FZ1in";
- X filename = argv[1];
- X
- X if ((outfd = creat(filename,0666)) == -1)
- X {
- X fprintf(stderr,"couldn't create output file\n");
- X perror(filename);
- X exit(2);
- X }
- X
- X if (!(IntuitionBase = OpenLibrary("intuition.library",0)))
- X {
- X fprintf(stderr,"can't open intuition.library\n");
- X goto clean;
- X }
- X
- X add_cleanup(midi_cleanup);
- X
- X if (!(MidiBase = OpenLibrary(MIDINAME,MIDIVERSION)))
- X {
- X fprintf(stderr,"can't open midi.library\n");
- X goto clean;
- X }
- X
- X /* create our public source node */
- X if (!(source = CreateMSource(sname,NULL)))
- X {
- X fprintf(stderr,"can't create Source port %s\n",sname);
- X goto clean;
- X }
- X
- X /* create our dest node (public) */
- X if (!(dest = CreateMDest(dname,NULL)))
- X {
- X fprintf(stderr,"can't create Dest port %s\n",dname);
- X goto clean;
- X }
- X
- X route_a = MRoutePublic("midi_in",dname,&myrouteinfo);
- X if (!route_a)
- X route_a = MRoutePublic("MidiIn",dname,&myrouteinfo);
- X
- X route_b = MRoutePublic(sname,"MidiOut",&myrouteinfo);
- X
- X init_timer();
- X
- X commune_with_fz1(source,dest,wanted_channel,outfd); /* process until shutdown */
- X
- Xclean:
- X close(outfd);
- X cleanup();
- X exit(0);
- X}
- X
- Xvoid _abort(void) /* abort routine called when CTRL-C is hit (Aztec) */
- X{
- X /* fflush(stdout); cleanup(); exit(1); */
- X} /* we're polling it in the loop */
- X
- Xvoid dump_open(struct FZ1_Message *p)
- X{
- X unsigned int nblocks;
- X
- X printf("dump of Open MIDI message received from Casio FZ-1\n");
- X printf("channel %d, status %d, ",p->encoded_channel & 0x0f,p->body.openmsg.status);
- X printf("banks %d, voices %d, ",p->body.openmsg.banks,p->body.openmsg.voices);
- X
- X if(p->body.openmsg.status != 1 || p->body.openmsg.banks != 0
- X || p->body.openmsg.voices != 1)
- X panic("I don't know how to do anything other than save a single voice");
- X
- X nblocks = (p->body.openmsg.nblocks_hinibble << 12)
- X | (p->body.openmsg.nblocks_next_to_hinibble << 8)
- X | (p->body.openmsg.nblocks_next_to_lonibble << 4)
- X | p->body.openmsg.nblocks_lonibble;
- X printf("nblocks %d, ",nblocks);
- X printf("edit bank %d, edit voice %d\n",p->body.openmsg.edit_bank,p->body.openmsg.edit_voice);
- X}
- X
- X/* end of casio.c */
- X
- END_OF_FILE
- if test 10606 -ne `wc -c <'casio.c'`; then
- echo shar: \"'casio.c'\" unpacked with wrong size!
- fi
- # end of 'casio.c'
- fi
- if test -f 'casio.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'casio.h'\"
- else
- echo shar: Extracting \"'casio.h'\" \(561 characters\)
- sed "s/^X//" >'casio.h' <<'END_OF_FILE'
- X/* casio.h - casio fz1 midi include file */
- X
- Xstruct FZ1_OpenMsg
- X{
- X UBYTE status;
- X UBYTE banks;
- X UBYTE voices;
- X UBYTE nblocks_lonibble;
- X UBYTE nblocks_next_to_lonibble;
- X UBYTE nblocks_next_to_hinibble;
- X UBYTE nblocks_hinibble;
- X UBYTE edit_bank;
- X UBYTE edit_voice;
- X UBYTE eox;
- X};
- X
- Xstruct FZ1_DataMsg
- X{
- X UBYTE data[128];
- X UBYTE checksum;
- X UBYTE eox;
- X};
- X
- Xstruct FZ1_Message
- X{
- X UBYTE sysex;
- X UBYTE casio_id;
- X short fz1_id;
- X UBYTE encoded_channel;
- X UBYTE command;
- X union {
- X struct FZ1_DataMsg datamsg;
- X struct FZ1_OpenMsg openmsg;
- X } body;
- X};
- X
- X/* end of casio.h */
- END_OF_FILE
- if test 561 -ne `wc -c <'casio.h'`; then
- echo shar: \"'casio.h'\" unpacked with wrong size!
- fi
- # end of 'casio.h'
- fi
- if test -f 'casio.uu' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'casio.uu'\"
- else
- echo shar: Extracting \"'casio.uu'\" \(18036 characters\)
- sed "s/^X//" >'casio.uu' <<'END_OF_FILE'
- Xbegin 644 casio
- XM```#\P`````````#``````````(```N,```0[@````$```/I```+C$[Z%KYC3
- XM87-I;R!F>C$@9&]W;FQO860@<')O9W)A;0``3E7__$CG``!*K(`*9P``%BM.P
- XM__PB;(`*+&R#4DZN_F(L;?_\2JR`#F<``!8K3O_\(&R`#BQL@`9.KO^^+&W_N
- XM_$JL@!)G```6*T[__"!L@!(L;(`&3J[_T"QM__Q*K(`69P``%BM.__P@;(`6O
- XM+&R`!DZN_Z8L;?_\2JR`&F<``!8K3O_\(&R`&BQL@`9.KO^F+&W__$JL@`9GP
- XM```6*T[__")L@`8L;(-23J[^8BQM__Q,WP``3EU.=4Y5_^Q(YP``*VT`"/_P@
- XM*T[_["!M``@L;(`&3J[_=BQM_^PK0/_X(&W_\`PH`$0``68``"H@;?_P#&@"E
- XM```"9@``'"!M__!P`!`H``0"@````/`,@````'!G```,<`!,WP``3EU.=2!MC
- XM__!P`!`H``0"@`````\K0/_\#*W_____``QG```2("W__+"M``QG```&<`%@[
- XMR"!M__!P`!`H``5@``"J*WP````0__1@``"R*WP````'__1@``"F*WP```"(-
- XM__0@+?_XL*W_]&8``$HO+?_P3KH%Q%A/(&W_\'(`$B@`AK"!9P``,"\M__!.)
- XMN@6J6$\O`"!M__!P`!`H`(8O`$AZ`'Q(;(&\3KH2#D_O`!!P`F``_TA@``!&\
- XM2'H`ATZZ#TQ83W`"8`#_-/]&_U+_OO^^_U[_R/^^_\C_R/_(_\C_R/_(_\C_Y
- XMR/^^!$``<`Q``!!DT-!`,#L`TD[[```@+?_XL*W_]&<```AP`F``_NX@;?_P<
- XM<``0*``%8`#^X&-H96-K<W5M(&5R<F]R+"!E>'!E8W1E9"`E>"P@<V%W("5XW
- XM"@!G;W0@82!M97-S86=E($D@9&]N)W0@:VYO=R!H;W<@=&\@:&%N9&QE`$Y5^
- XM_]1(YP``0JW_\$*M_^Q"K?_D0JW_X$*M_]PK3O_4</\L;(-23J[^PBQM_]0K?
- XM0/_H"```#&8``J)*K?_<9@`"FDJM_]QF``((*T[_U"!M``PL;(`&3J[_CBQM`
- XM_]0I0(-69P`!["!L@U8,$`#P9@`!R"ML@U;_V"\M`!`O+?_83KK]L%!/`H``%
- XM``#_*T#_]$JM_^QF``!B#*T```!P__1G```,2'H"?DZZ#?983PRM_____P`0/
- XM9@``%B!M_]AP`!`H``0"@`````\K0``0*WP````!_^PO+?_83KH*$EA/2'@`I
- XM<B\M`!`O+0`(3KH#H$_O``Q@``%"#*T````!_^QF``$L3KH-5"`M__1@``$&B
- XM2'@`<B\M`!`O+0`(3KH#<$_O``Q.N@SR4JW_Y'(*("W_Y$ZZ)$!F```:+RW_B
- XMY$AZ`@Y.NA$F4$](;(&F3KHA!EA/+RT`%"\M_]A.N@/$4$]"K?_P8```Q$AX8
- XM`',O+0`0+RT`"$ZZ`QA/[P`,3KH,FB\M_^1(>@'13KH0X%!/2&R!IDZZ(,!8C
- XM3U*M_^!2K?_P#*T````*__!O```,2'H!LDZZ#.Y83V```')(>@'82&R!O$ZZ,
- XM#XA03RM\`````?_<8```6"\M__1(>@')2&R!O$ZZ#VI/[P`,*WP````!_^QG"
- XM```42'H!Q4AL@;Q.N@].4$]@`/]D2'H!V4ZZ#)183V```!A5@&<`_U`$@```&
- XM`&]GF%>`9P#^ZF"J8```#$AZ`=A.N@QL6$\K3O_4(&R#5BQL@`9.KO^"+&W_P
- XMU&``_?0@;(-:(&@`#B!H`!1*D&<``'8K3O_4(&R#6B!H``XL;(-23J[^C"QM.
- XM_]1*@&<``%@,K0````'_[&8``$Q(>`!S+RT`$"\M``A.N@'T3^\`#"\M_^1($
- XM>@%W3KH/P%!/2&R!IDZZ'Z!83U*M_^!2K?_P#*T````*__!O```,2'H!6$ZZ-
- XM"\Y83V``_41*K(`>9P``*"\L@!Y(;(->+RT`%$ZZ)7Q/[P`,L*R`'F<```Q(J
- XM>@%:3KH.;EA/+RW_X"\M_^1(>@%43KH/5$_O``Q,WP``3EU.=6]U="!O9B!S_
- XM>6YC("T@;&]O:VEN9R!F;W(@)T]P96XG(&9R;VT@1EHQ`"4T9"!O:R`-`"4T3
- XM9"!E<G(-`&5X8V5E9&5D(&UA>"!R971R:65S(&9O<B!A('!A8VME="`M('1RH
- XM86YS9F5R(&9A:6QE9`!C87-I;R!I<R!D;VYE"@!U;FMN;W=N(&-O;6UA;F0@.
- XM/2`P>"5X"@!W:6QL('1R>2!T<F5A=&EN9R!I="!A<R!A(&1A=&$@97)R;W(*A
- XM`'5N:VYO=VX@8V]M;6%N9"!A;F0@;F]T(&EN("=R96%D)R!M;V1E`'-T871EZ
- XM('9A<FEA8FQE(&9R:65D`"4T9"!T;6\-`&5X8V5E9&5D(&UA>"!R971R:65S%
- XM(&9O<B!A('!A8VME="`M('1R86YS9F5R(&9A:6QE9`!O=71P=70@9FEL90!T\
- XM;W1A;"!P86-K971S(')E8V5I=F5D("5D("@E9"!R971R:65S*0H`3E7__$CGZ
- XM``!P`!`L@":`K0`,&4"`)AEM`!.`)RM.__Q![(`B(D@@;0`(+&R`!DZN_X@L9
- XM;?_\3-\``$Y=3G5.5?_R2.<``"MM``C__%RM__Q"K?_V0JW_\F````92K?_V!
- XM#*T```"`__9L```4(&W__%*M__QP`!`0T:W_\F#><`"0K?_R`H````!_3-\`W
- XM`$Y=3G5.5?_V2.<``"MM``C__%RM__Q"K?_V8```!E*M__8,K0```$#_]FP`L
- XM`'8@;?_\4JW__!M0__L@;?_\4JW__!M0__IP`!`M__KI@'(`$BW_^X"!(BR`,
- XM'E*L@!Y![(->$8`8``RL``!``(`>;0``+DAX0`!(;(->+RT`#$ZZ(M!/[P`,C
- XM#(```$``9P``#$AZ`!A.N@O`6$]"K(`>8`#_?DS?``!.74YU;W5T<'5T(&9IU
- XM;&4`3E7_Y$CG```K?/______[$AZ`F9(;(&\3KH+8%!/2'H"F$AL@;Q.N@M2S
- XM4$](>@+"2&R!O$ZZ"T103TAZ`O%(;(&\3KH+-E!/2'H#'4AL@;Q.N@LH4$](/
- XM>@,X2&R!O$ZZ"QI03PRM`````@`(9P``*$AZ`V!(;(&\3KH+`%!/2'H#A4AL*
- XM@;Q.N@KR4$](>``!3KHB\%A/0?H#I2M(__Q!^@.D*TC_^"!M``PK:``$__1(J
- XM>`&V+RW_]$ZZ$:903RM`__`,@/____]F```D2'H#?$AL@;Q.N@JD4$\O+?_T>
- XM3KH*P%A/2'@``DZZ(IA83RM._^AP`$/Z`W$L;(-23J[]V"QM_^@I0(`*9@``\
- XM%$AZ`VM(;(&\3KH*9%!/8``!/DAZ]HA.N@AV6$\K3O_H<`=#^@-G+&R#4DZN]
- XM_=@L;?_H*4"`!F8``!1(>@-<2&R!O$ZZ"BI03V```00K3O_HD\D@;?_\+&R`L
- XM!DZN_]8L;?_H*4"`$F8``!HO+?_\2'H#04AL@;Q.N@GV3^\`#&```,XK3O_H_
- XMD\D@;?_X+&R`!DZN_\0L;?_H*4"`#F8``!HO+?_X2'H#*$AL@;Q.N@G`3^\`T
- XM#&```)A([40`_^1![(`J)$@B;?_X0?H#'RQL@`9.KO^43.U$`/_D*4"`%DJL(
- XM@!9F```H2.U$`/_D0>R`*B1((FW_^$'Z`ODL;(`&3J[_E$SM1`#_Y"E`@!9(3
- XM[40`_^1![(`J)$A#^@+>(&W__"QL@`9.KO^43.U$`/_D*4"`&DZZ!;0O+?_P8
- XM+RW_["\L@`XO+(`23KKWVD_O`!`O+?_P3KHBVEA/3KH';$*G3KHA%EA/3-\`O
- XM`$Y=3G5R96%D>2!T;R!T86QK('1O(&-A<VEO+"!T:&4@<F]U=&5S(&%R92!DO
- XM;VYE(&%U=&]M871I8V%L;'D@9G)O;0H`;6ED:5]I;B!I9B!I="=S(&%V86EL%
- XM86)L92P@96QS92!-:61I26X@86YD('1O($UI9&E/=70N"@!)(&1O=VYL;V%D-
- XM(&%N9"!E>&ET('=H96X@9&]N92X@($D@875T;VUA=&EC86QL>2!D;R!R971RE
- XM:65S+@H`3F]N971H96QE<W,L($D@;6%Y("=H86YG)R!W:&5N('5P;&]A9&EN7
- XM9RX@(%1H:7,@:7,@<V]F="X*`$AI="!>1"!T;R!R971R>2X@($]R(&AI="!>/
- XM0RP@22=L;"!E>&ET+@H`22!W<FET92!T;R!T:&4@9FEL92!O;B!T:&4@9FQYJ
- XM("AE=F5R>2`R-38@<&%C:V5T<RDL('-O('=A=&-H(&ET+@H`=7-A9V4Z(&-AQ
- XM<VEO(&9I;&5N86UE+"!R;W5T97,@87)E(&%U=&]M871I8RP@=&AE;@H`('-E6
- XM;&5C="!&6B!O=71P=70@9&5V:6-E(&%S("=M:61I)R!A;F0@9&\@82!V;VECF
- XM92!S879E"@!&6C%O=70`1EHQ:6X`8V]U;&1N)W0@8W)E871E(&]U='!U="!F:
- XM:6QE"@!I;G1U:71I;VXN;&EB<F%R>0!C86XG="!O<&5N(&EN='5I=&EO;BYL&
- XM:6)R87)Y"@!M:61I+FQI8G)A<GD`8V%N)W0@;W!E;B!M:61I+FQI8G)A<GD*H
- XM`&-A;B=T(&-R96%T92!3;W5R8V4@<&]R="`E<PH`8V%N)W0@8W)E871E($1E#
- XM<W0@<&]R="`E<PH`;6ED:5]I;@!-:61I26X`36ED:4]U=`!.50``2.<``$S?9
- XM``!.74YU3E7__$CG``!(>@#\3KH';EA/(&T`"'``$"@`!B\`(&T`"'``$"@`,
- XM!`*`````#R\`2'H!"$ZZ!T9/[P`,(&T`"'``$"@`""\`(&T`"'``$"@`!R\`5
- XM2'H`_$ZZ!R)/[P`,(&T`"`PH``$`!F8``!P@;0`(2B@`!V8``!`@;0`(#"@`8
- XM`0`(9P``#$AZ`-Y.N@,D6$\@;0`(<``0*``,<@SCH"!M``AR`!(H``OA@8"!K
- XM(&T`"'(`$B@`"NF!@($@;0`(<@`2*``)@($K0/_\+RW__$AZ`-5.N@:F4$\@(
- XM;0`(<``0*``.+P`@;0`(<``0*``-+P!(>@#`3KH&A$_O``Q,WP``3EU.=61UC
- XM;7`@;V8@3W!E;B!-241)(&UE<W-A9V4@<F5C96EV960@9G)O;2!#87-I;R!&\
- XM6BTQ"@!C:&%N;F5L("5D+"!S=&%T=7,@)60L(`!B86YK<R`E9"P@=F]I8V5SV
- XM("5D+"``22!D;VXG="!K;F]W(&AO=R!T;R!D;R!A;GET:&EN9R!O=&AE<B!T5
- XM:&%N('-A=F4@82!S:6YG;&4@=F]I8V4`;F)L;V-K<R`E9"P@`&5D:70@8F%NW
- XM:R`E9"P@961I="!V;VEC92`E9`H``$Y5__A(YP`P0J="ITZZ#HQ03R1`(`IFO
- XM```,<`!,WPP`3EU.=4AX`"@O"DZZ#XA03R9`(`MF```.+PI.N@\:6$]P`^
- XM*T[_^'(`(DL@+0`(0?H`*BQL@U).KOY$+&W_^"M`__Q*K?_\9P``#B\+3KH`3
- XM&EA/<`!@I"`+8*!T:6UE<BYD979I8V4``$Y5__Q(YP`P)&T`""`*9P``+B9J$
- XM``X@"V<```HO"TZZ#JQ83RM.__PB2BQL@U).KOX^+&W__"\*3KH//%A/3-\,0
- XM`$Y=3G5.5?_\2.<``"M.__PB;(-:+&R#4DZN_B`L;?_\*7S_____PUXO+(-:O
- XM3KK_D%A/3-\``$Y=3G5.50``2.<``$*G3KK^[EA/*4"#6F8```Q(>@`D3KH`3
- XMO%A/(&R#6BEH`!3#7DAZ_YQ.N@%T6$],WP``3EU.=4-A;B=T(&-R96%T92!T!
- XM:6UE<BX`3E7__$CG```@;(-:,7P`"0`<(&R#6B%\`````P`@(&R#6D*H`"0KN
- XM3O_\(FR#6BQL@U).KOXR+&W__$S?``!.74YU3E7__$CG```K3O_\(FR#6BQL^
- XM@U).KOX@+&W__$S?``!.74YU2'@`"4AZ`)9(>``"3KH9X$ZZ`11(>``*3KH:)
- XMO$_O`!!.=4Y5_YQ(YR`@=`!*;(`X9Q9(>@"T2'H`L$AZ`&I.N@&8=`%/[P`,-
- XM.7P``8`X0>T`#"1(+PHO+0`(2&W_G$ZZ#B1(>@"$2'H`@$AM_YQ.N@%H2D)/?
- XM[P`89A!.N@"J2'@`"DZZ&E)83V`*2'@`%$ZZ&D983TS?!`1.74YU7D,@86)OU
- XM<G0*`$1O=6)L92!P86YI8R!D971E8W1E9"$@(%-Y<W1E;2!M87D@8F4@=6YR!
- XM96QI86)L92!U;FQE<W,@<F5B;V]T960A`%!!3DE#`$CG`"`O#G(!<`@L;(-2L
- XM3J[_.BQ?)$!*@&8*2'H`4$ZZ_Q183R2O``@E;(`Z``0I2H`Z3-\$`$YU2.<`J
- XM,$JL@#IG)"1L@#H@;(`Z*6@`!(`Z)E(O#G`((DHL;(-23J[_+BQ?3I-@UDS?&
- XM#`!.=55N86)L92!T;R!A;&QO8V%T92!M96UO<GD@9F]R(&$@8VQE86YU<"!F]
- XM=6YC=&EO;@``2.<@("1O``PD+P`40A(5?``!``$5?``!``)*@F<$<`9@`G`!P
- XM-4``!$J"9P1P`V`"<``U0``&0JH`"$*J`!`E;P`0``P@"DS?!`1.=4Y5_TQ(F
- XMYR`@)&T`"$AZ`-I(;?]@3KH6RB\L@`)(;?]@3KH*GDAX``%(;?]@2&W_[&&"1
- XM6&W_\EAM__`O+?_X3KH1FB0`2'@``2\*2&W_V$ZZ_V0O"DZZ$82P@D_O`#!OJ
- XM"B\*3KH1=B0`6$]![?_8*TC__`9M`!+_WEAM_]Q(>``!+RT`#$AM_\1.NO\JD
- XM2'@``2\M`!!(;?^P3KK_&DCM3`S_3'9"("W_3"(`YXC0@0:`````*"0`<@!PP
- XM`$'M_[`F2$'M_\0D2$'M_^PB2)'(+&R`"DZN_J1,[4P,_TQ/[P`83-\$!$Y=4
- XM3G5-97-S86=E(&9R;VT@`$CG("!![P`4)$@O"B\O`!0O+P`43KH+ZB0`(`)/*
- XM[P`,3-\$!$YU2.<`("1O``@@"F<>2A)G&DAL@;PO"DZZ`)9(;(&\2'H`2$ZZR
- XM`(I/[P`0+RS#8DZZ`CPD0$J`6$]G*$H29R1(;(&\+RS#8DZZ`B183R\`3KH`F
- XM7DAL@;Q(>``*3KH`$$_O`!!,WP0`3G4Z(```2.<@("0O``PD;P`0(`IG!DIJ'
- XM``QF"'#_3-\$!$YU(%*QZ@`$9`P@4E*2$()P`!`"8.9P`!`"+P`O"DZZ$+Y0@
- XM3V#62.<@,"9O`!`D;P`48#0@4K'J``1D#"!24I(0@G``$`)@#G``$`(O`"\*G
- XM3KH0C%!/#(#_____9@AP_TS?#`1.=5*+%!-FR'``8/!(YR`@0>\`$"1(+PHO;
- XM+P`02&R!IDZZ"LPD`"`"3^\`#$S?!`1.=0!.;R!S=6-H(&9I;&4@;W(@9&ERN
- XM96-T;W)Y`$%R9R!L:7-T('1O;R!L;VYG`$)A9"!F:6QE(&1E<V-R:7!T;W(`T
- XM3F]T(&5N;W5G:"!M96UO<GD`1FEL92!E>&ES=',`26YV86QI9"!A<F=U;65NF
- XM=`!&:6QE('1A8FQE(&]V97)F;&]W`%1O;R!M86YY(&]P96X@9FEL97,`3F]TM
- XM(&$@8V]N<V]L90!097)M:7-S:6]N(&1E;FEE9`!)+T\@97)R;W(`3F\@<W!AX
- XM8V4@;&5F="!O;B!D979I8V4`4F5S=6QT('1O;R!L87)G90!!<F=U;65N="!O.
- XM=70@;V8@9&]M86EN`$5X96,@9F]R;6%T(&5R<F]R`%)E860M;VYL>2!F:6QE9
- XM('-Y<W1E;0!#<F]S<RUD979I8V4@<F5N86UE`$YO=&AI;F<@=&\@<F5A9`!(B
- XMYR``)"\`"$J";1H,@@```!)N$B`"Y8!![(`^(#`(`$S?``1.=4'Z``8@"R,
- XM56YK;F]W;B!E<G)O<@`J3V%R0^R#4D7L@U*UR68.,CP0&6L(=``BPE')__PIB
- XM3\-F+'@`!"E.@U)(YX"`""X`!`$I9Q!+^@`(3J[_XF`&0J?S7TYS0_H`(DZN=
- XM_F@I0,-J9@PN/``#@`=.KO^48`8J3TZZ`!I03TYU9&]S+FQI8G)A<GD`2?D`_
- XM`'_^3G5(YP`@2.<``B(\``$``#`L@TC!_``&+&R#4DZN_SI,WT``*4##;F8>T
- XM2.<!!IO-+CP``0``+&R#4DZN_Y1,WV"`+FS#9DYU(&S#;D)H``0@;,-N,7P`K
- XM`0`0(&S#;C%\``$`"B!LPV8@+,-FD*@`!%"`*4##<B!LPW(@O$U!3EA(YP`"<
- XMD\DL;(-23J[^VDS?0``D0$JJ`*QG/"\O``PO+P`,+PI.N@$,*7P````!PW8@0
- XM;,-N6(@P$`!`@``P@"!LPV[1_`````HP$`!`@``P@$_O``Q@:DCG``(@2M'\M
- XM````7"QL@U).KOZ`3-]``$CG``(@2M'\````7"QL@U).KOZ,3-]``"E`PWH@6
- XM;,-Z2J@`)&<F2.<``B!LPWH@:``D(A`L;,-J3J[_@DS?0``O+,-Z+PI.N@1.\
- XM4$\I;,-ZPWY(YP`"+&S#:DZN_\I,WT``(&S#;B"`2.<``BQLPVI.KO_$3-]`5
- XM`"!LPVXA0``&9R1(YR`")#P```/M0?H`-"((+&S#:DZN_^),WT`$(&S#;B%`8
- XM``PO+,-^+RS#@DZZ[YY03R\`3KH3&%A/3-\$`$YU*@!(YS@R)B\`'"@O`"`F(
- XM;P`D($-*J`"L9Q0@0R`H`*SE@"Q`("X`$.6`)$!@!"1L@TH0$DB`2,#0A%2`Y
- XM*4##ADCG``)R`"`LPX8L;(-23J[_.DS?0``I0,.*9@9,WTP<3G40$DB`2,`D%
- XM`"\"($I2B"\(+RS#BDZZ!&Q(>@%*($+1[,.*+PA.NA!H+P0O"R\LPXI.N@$T.
- XM(&S#BD(P*``I?`````'#@B1"U>S#BE**)DI/[P`@$!)(@$C`)``,@````"!GE
- XM(`R"````"6<8#((````,9Q`,@@````UG"`R"````"F8$4HI@S`P2`"!M=@P2:
- XM`")F*E**$!I(@$C`)`!G'!;"#((````B9A`,$@`B9@12BF`&0BO__V`"8-I@`
- XM.!`:2(!(P"0`9RP,@@```"!G)`R"````"6<<#((````,9Q0,@@````UG#`R"M
- XM````"F<$%L)@RD(;2H)F`E.*4JS#@F``_U)"$TCG``)R`"`LPX+E@%B`+&R#Z
- XM4DZN_SI,WT``*4##?F8(0JS#@F``_M!T`"1LPXI@&B`"Y8`@;,-^(8H(`"\*V
- XM3KH*1-7`4HI83U*"M*S#@FW@(`+E@"!LPWY"L`@`8`#^F"``3.\#```$(`@BD
- XM+P`,2AAF_%.($-E7R?_\!($``0``:O)"($YU+R\`"$AX`P$O+P`,809/[P`,J
- XM3G5(YSXR+&\`)"@O`"A.NA#&)FS#;G0`8!!R!B`"3KH3`$JS"`!G$%*",&R#)
- XM2+'";NAV"&```4X(!``)9UY(YR`"=/\B+P`$+&S#:DZN_ZQ,WT`$*@!G1$CG0
- XM``(B!2QLPVI.KO^F3-]``$CG``(B%RQLPVI.KO^X3-]``$J`9AQ(YP`"+&S#?
- XM:DZN_WQ,WT``)@`,@````,UF``#J2.<@`B0\```#[2(O``0L;,-J3J[_XDS?>
- XM0`0D0"`*9@``I`@$``AF!G8!8```O$CG(`(D/````^XB+P`$+&S#:DZN_^),4
- XMWT`$)$!*@&862.<``BQLPVI.KO]\3-]``"8`8```ADCG``)P(4/Z`,`L;(-2=
- XM3J[]V$S?0``L`&<42.<``B)&+&R#4DZN_F),WT``8#!(YS`"=@%!^@">)`@B_
- XM"BQLPVI.KO_03-]`#$CG,`)V_W0`(@HL;,-J3J[_ODS?0`Q@,"`$`H````4`W
- XM#(````4`9B!(YP`"(@HL;,-J3J[_W$S?0`!V!2E#PV)P_TS?3'Q.=7(&(`).4
- XMNA&*)XH(`'(&(`).NA%^-X0(!`@$``MG%DCG,`)V`70`(@HL;,-J3J[_ODS?[
- XM0`P@`F#"9&]S+FQI8G)A<GD```!(YS`R+&\`&$CG``)P`$/Z`-8L;(-23J[]7
- XMV$S?0``I0,..9@9,WTP,3G5(YP`"(&\`("!H`"0@:``$+&S#CDZN_[),WT``(
- XM)$!*@&=^2.<``D/Z`*$@:@`V+&S#CDZN_Z!,WT``)`!G4$CG(`(D/````^TBO
- XM%RQLPVI.KO_B3-]`!"9`2H!G,B`+Y8`F`"!#+6@`"`"D+4L`G$CG(`(D/```0
- XM`^U!^@!6(@@L;,-J3J[_XDS?0`0M0`"@2.<``B!*+&S#CDZN_Z9,WT``2.<`(
- XM`B)LPXXL;(-23J[^8DS?0`!"K,..8`#_0&EC;VXN;&EB<F%R>0!724Y$3U<`7
- XM*@!,[P,```0@"$H89OQ32!#99OQ.=4SO`P``!"`((B\`#&`"$-E7R?_\9PP$E
- XM@0`!``!J\$YU0AA1R?_\!($``0``:O).=4CG(#`F;P`02.<``G#_+&R#4DZN@
- XM_K9,WT``)``,@/____]F"'``3-\,!$YU2.<``B(\``$``7`B+&R#4DZN_SI,X
- XMWT``)$!*@&862.<``B`"+&R#4DZN_K!,WT``<`!@QB5+``H5;P`7``D5?``$G
- XM``A"*@`.%4(`#TCG``*3R2QL@U).KO[:3-]``"5``!`@"V<42.<``B)*+&R#T
- XM4DZN_IY,WT``8!`@2M'\````%"\(3KH&-EA/(`I@`/]L2.<`("1O``A*J@`*/
- XM9Q)(YP`"(DHL;(-23J[^F$S?0``5?`#_``@E?/____\`%$CG``)P`!`J``\L?
- XM;(-23J[^L$S?0`!(YP`"<"(B2BQL@U).KO\N3-]``$S?!`!.=4CG(#`F;P`0<
- XM)"\`%"`+9@AP`$S?#`1.=4CG``(B/``!``$@`BQL@U).KO\Z3-]``"1`2H!F"
- XM!'``8-@5?``%``@U0@`2)4L`#B`*8,9(YP`@)&\`""`*9@9,WP0`3G45?`#_C
- XM``@E?/____\`%"5\_____P`82.<``G``,"H`$B)*+&R#4DZN_RY,WT``8,I.@
- XM5?_J2.<@("1M``@[?`0(__8K2O_J*TK_\BM*_^X&K0``?___[B\M`!`O+0`,6
- XM2&W_ZDZZ`!8D`$(R*``@`D_O``Q,WP0$3EU.=4Y5_?1(YS\R)FT`""QM`!!^_
- XM`"1M``P6$F8*(`=,WTS\3EU.=5**#`,`)6=")`<@4['K``1D#"!34I,0@W``_
- XM$`-@#G``$`,O`"\+3KH%0%!/#(#_____9P`$9%*"%A)F!"`"8+A2B@P#`"5F&
- XMPBX">``K?````"#__!8:<``0`V!F",0``R",0``6#L",0``F#F",0``V#@_
- XM6(XD+O_\2H)L!@C$``!$@A8:8%8K?````##__'0`8!@@`N>`<@`2`]"!T(+0J
- XM@B0`!((````P%AIP`!`#0>R`CQ`P``!(@`@```)FU&`<!$``(&>@5T!GHE]`]
- XM9Z130&>.54!GA%=`9ZQ@LBM"__@D/```?<8,`P`N9EP6&@P#`"IF%%B.)"[_O
- XM_$J";`8D/```?<86&F`P=`!@&"`"YX!R`!(#T('0@M"")``$@@```#`6&G``(
- XM$`-![("/$#```$B`"````F;4#((``'W&9P@K?````"#__"H"#`,`:&8&",0`X
- XM!V`6#`,`;&8&",0`!F`*#`,`3&8&",0`"!8:*TH`#'``$`-@``&.8``#&@@$G
- XM``=G"EB.(&[__#"'8!@(!``&9PI8CB!N__P@AV`(6(X@;O_\((=T`&```:A8"
- XMCB1N__PO"DZZ`P@D``R%``!]QEA/9P:TA6\")`5@``&&6(X6+O__0>W]^"1(D
- XM$(-T`6```7)T"&`0`$0`2'9X=!!@!@C$``1T"@P#`%AF"$'Z`IX@"&`&0?H"T
- XMIR`(*T#]]`@$``9G"%B.+"[__&`4"`0`!&<(6(XL+O_\8`98CBPN__P(!``$&
- XM9PI*AFP&1(8(Q``%0>W_^"1(#(4``'W&9@)Z`4J&9@1*A6<<(@(@!DZZ!;X@7
- XM;?WT%3`(`"("(`9.N@6Z+`!FY$'M__B1RB0("`0``V=N#`,`;V842H)G"@P25
- XM`#!G"+2%;00J`E*%8%0,`P!X9P8,`P!89DA*@F=$#!(`,&<^M(5L$$'M_?JQ^
- XMRF0(%3P`,%*"8.P(!```9AP,K0```##__&82(`)4@+"M__AL""HM__A5A6#*1
- XM%0,5/``P5(*TA6P00>W]^+'*9`@5/``P4H)@[&!,!$``)6<`_L@$0``S9P#^M
- XMV`1```MG`/ZR4T!G`/[.6T!G`/[(6T!G`/Y04T!G`/ZN4T!G`/ZL5T!G`/YL.
- XM54!G`/ZN5T!G`/Z@8`#^*@@$``1G*`@$``5G!A4\`"U@&@@$``%G!A4\`"M@W
- XM#@@$``)G!A4\`"!@`E."4H+>@@@$``!F``"0#*T````P__QF0@@$``1G/#`$:
- XM`D``)F<T(%.QZP`$9`X@4U*3$)IP`!`J__]@#G``$!HO`"\+3KH!I%!/#(#_Z
- XM____9P``R%.M__A3@F`T(%.QZP`$9!`@4U*3$*W__W``$"W__V`0<``0+?__L
- XM+P`O"TZZ`6I03PR`_____V<``(Y2AR`M__A3K?_XL()NP"H"(`)3@DJ`9RX@.
- XM4['K``1D#B!34I,0FG``$"K__V`.<``0&B\`+PM.N@$D4$\,@/____]G2*M
- XM"`0``&<\)`5@+"!3L>L`!&0.(%-2DQ"\`"!P`'`@8`Q(>``@+PM.N@#N4$\,4
- XM@/____]G$E*'("W_^%.M__BP@F[(8`#[6'#_8`#[7#`Q,C,T-38W.#E!0D-$A
- XM148`,#$R,S0U-C<X.6%B8V1E9@`@;P`$(`A*&&;\4TB1P"`(3G4@;P`$((A86
- XMD$*H``0A2``(3G5(YP`@)&\`""`*9D1![(&0)$A*:@`,9R8P*@`,`D`""&8<;
- XM2'C__R\*3KH`6@R`_____U!/9@AP_TS?!`!.==7\````%D'L@TBUR&7&<`!@F
- XMZ$AX__\O"DZZ`"Q03V#:2.<`($'L@9`D2"\*3KH!OEA/U?P````60>R#2+7(H
- XM9>I,WP0`3G5(YSP@)&\`&"@O`!P@"F<``9`T*@`,9P`!B`@"``EF``&`"`(`J
- XM`V8``7@@2M'\````##`0`D#O_3"`2JH`"&8<#(3_____9@AP`$S?!#Q.=2\*2
- XM3KH"R#0J``Q83P@"``YF-"!2L>H`"&,>2'@``2`2D*H`!"\`$"H`#DB`2,`O2
- XM`$ZZ!$Q/[P`,)*H`""!J`!#1TB5(``0,A/____]F!'8`8`(6!"`2D*H`""H`L
- XM,`("0`"@9TX,A/____]G(B!24I(0@R!*T?P````,,!`(P``.,(`T`$'Z_P0IK
- XM2,.24H4,A/____]G#`P#``IG!KJJ`!!E!'C_8`PE4@`$<``0`V``_TH(`@`.X
- XM9S!*A6<<+P4O*@`($"H`#DB`2,`O`$ZZ!':PA4_O``QF7B!*T?P````,,!`(5
- XM@``.,(`,A/____]F$B2J``@E:@`(``1P`!`#8`#^^D'Z_H8I2,.2($K1_```*
- XM``PP$`C```XP@"2J``@@:@`0T=(E2``$(%)2DA"#<``0`V``_L8@2M'\````=
- XM##`0",```C"`)6H`"``$)*H`"'#_8`#^IDY5__9(YS@@)&T`"'0`(`IG!DIJA
- XM``QF"G#_3-\$'$Y=3G4(*@`!``QF"B\*3KK]J(2`6$\0*@`.2(!(P"\`3KH&Y
- XM3H2`""H````-6$]G"B\J``A.N@&66$]*:@`49TY(>@!J2&W_]TZZ`E`X*@`4T
- XM=@!03W``,`1R"DZZ`'P&@````#!R!Y*#0>W_]Q&`&`!(Q(G\``I2@PR#````)
- XM!6W40BW__TAM__=.N@,26$]"DD*J``1"J@`(0FH`#$J"9P9P_V``_UAP`&``!
- XM_U)435``2.=(`$*$2H!J!$2`4D1*@6H&1($*1``!83Y*1&<"1(!,WP`22H!./
- XM=4CG2`!"A$J`:@1$@%)$2H%J`D2!81H@`6#8+P%A$B`!(A]*@$YU+P%A!B(?^
- XM2H!.=4CG,`!(04I!9B!(038!-`!"0$A`@,,B`$A`,@*"PS`!0D%(04S?``Q.L
- XM=4A!)@$B`$)!2$%(0$)`=`_0@-.!MH%B!)*#4D!1RO_R3-\`#$YU2.<@("1O0
- XM``QT01`J``Y(@$C`+P!.N@$Z2H!83V<"="$E?```!```$$AX!`!.N@#&)4``F
- XM"%A/9A@E?`````$`$"!*T?P````/)4@`"#0\`(`@2M'\````#'``,!`R`DC!Z
- XM@($P@"5J``@`!"2J``A,WP0$3G5(YP`PE\LD;,.68!`@2E"((F\`#+/(9PXFG
- XM2B12(`IF[$S?#`!.=2`+9P0FDF`$*5+#EDCG``(@*@`$4(`B2BQL@U).KO\N-
- XM3-]``*.<`,"1LPY9@'"922.<``B`J``10@")*+&R#4DZN_RY,WT``)$L@F
- XM"F;@0JS#EDS?#`!.=4CG("`D+P`,2H)F"'``3-\$!$YU2.<``G(`(`)0@"QLL
- XM@U).KO\Z3-]``"1`2H!F!'``8-I!^O^6*4C#FB2LPY8E0@`$*4K#EB`*4(!@/
- XMP$SO`P``!"`($-EF_$YU2.<@("0O``QR!B`"3KH$$B1`U>S#;DJ";0PP;(-(`
- XML<)O!$J29A`I?`````/#8G#_3-\$!$YU2.<``G(&(`).N@/@(&S#;B(P"``LC
- XM;,-J3J[_*$S?0`!*@&<$<`%@`G``8,Y(YS`@)"\`$$ZZ`6IR!B`"3KH#K"1`7
- XMU>S#;DJ";0PP;(-(L<)O!$J29A`I?`````/#8G#_3-\$#$YU2.<P`B`O`"13W
- XM@"8`)"\`("(2+&S#:DZN_[Y,WT`,)@`,@/____]F&$CG``(L;,-J3J[_?$S?&
- XM0``I0,-B</]@NDCG,`)V`'0`(A(L;,-J3J[_ODS?0`Q@HDCG``(B+P`(+&S#R
- XM:DZN_[A,WT``2H!F&$CG``(L;,-J3J[_?$S?0``I0,-B</].=7``8/I(YS`@Q
- XM)"\`$$ZZ`*1R!B`"3KH"YB1`U>S#;DJ";0PP;(-(L<)O!$J29A`I?`````/#^
- XM8G#_3-\$#$YU,"H`!`)```-F#"E\````!L-B</]@Y`@J``,`!&<62.<P`G8!U
- XM=``B$BQLPVI.KO^^3-]`#$CG,`(F+P`D)"\`("(2+&S#:DZN_]!,WT`,)@`,7
- XM@/____]F&$CG``(L;,-J3J[_?$S?0``I0,-B</]@BB`#8(9(YR``2.<``B(\@
- XM```0`'``+&R#4DZN_LY,WT``)``(```,9Q)*K,-V9@@@`DS?``1.=4ZZX9!PK
- XM`R2JS#GF<4(&S#GB!H``1.D"!LPYXI4,.>8.9*K,.29P8@;,.23I`O+P`$A
- XM3KH`!EA/3G5(YS``)B\`#$JLPVYG,G0`8`HO`DZZ`7!83U*",&R#2+'";NY(Y
- XMYP`","R#2,'\``8B;,-N+&R#4DZN_RY,WT``2JS#FF<&(&S#FDZ02JR#3F<4<
- XM2.<``B(L@TXL;,-J3J[_IDS?0`!*K,.B9P@@;,.B(*S#IDJLPZIG%$CG``(B"
- XM;,.J+&R#4DZN_F),WT``2JS#KF<42.<``B)LPZXL;(-23J[^8DS?0`!*K,.R^
- XM9Q1(YP`"(FS#LBQL@U).KOYB3-]``$JLP[9G%$CG``(B;,.V+&R#4DZN_F),:
- XMWT``2.<`!BQX``0(+@`$`2EG$$OZ``A.KO_B8`9"I_-?3G,J7TJLPWIF/$JLW
- XMPXIG-$CG``(@+,.&(FS#BBQL@U).KO\N3-]``$CG``(@+,."Y8!8@")LPWXL$
- XM;(-23J[_+DS?0`!@)$CG``(L;(-23J[_?$S?0`!(YP`"(FS#>BQL@U).KOZ&"
- XM3-]``$CG``(B;,-J+&R#4DZN_F),WT``(`,N;,-F3G5,WP`,3G5(YR`@)"\`P
- XM#'(&(`).N@!*)$#5[,-N2H)M##!L@TBQPF\$2I)F$"E\`````\-B</],WP0$A
- XM3G4P*@`$`D"``&822.<``B(2+&S#:DZN_]Q,WT``0I)P`R.=P`#0!Q,`F!
- XM`4A#QL!(0T)#U(-(0,#!2$!"0-""3-\`#DYU``````/L`````0````$``!<X:
- XM`````````_(```/J````U`````0`````````````````````````````````Z
- XM````\$0"`'``]P`$`/__````````````````````````%38``!4W```540``<
- XM%6,``!5W```5B0``%94``!6F```5N@``%<X``!7<```5[@``%?@``!80```6V
- XM(0``%C@``!9*```68```%G0````3`"`@("`@("`@(#`P,#`P("`@("`@("`@2
- XM("`@("`@("`@D$!`0$!`0$!`0$!`0$!`0`P,#`P,#`P,#`Q`0$!`0$!`"0D)#
- XM"0D)`0$!`0$!`0$!`0$!`0$!`0$!`0%`0$!`0$`*"@H*"@H"`@("`@("`@("_
- XM`@("`@("`@("`D!`0$`@````````````````````````````````````````T
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````@````````$```````````````````0`'
- XM`0`````!```````````````````$``(``````0``````````````````````)
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM%``````````````#[````!0``````````````#P```!`````1````$@```!,K
- XM````4````%0```!8````7````&````!D````:````&P```!P````=````'@`,
- X?``!\````@````(0````````#\@```^L````!```#\FP`%
- X``
- Xend
- Xsize 12856
- END_OF_FILE
- if test 18036 -ne `wc -c <'casio.uu'`; then
- echo shar: \"'casio.uu'\" unpacked with wrong size!
- fi
- # end of 'casio.uu'
- fi
- if test -f 'cleanup.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'cleanup.c'\"
- else
- echo shar: Extracting \"'cleanup.c'\" \(1419 characters\)
- sed "s/^X//" >'cleanup.c' <<'END_OF_FILE'
- X/* cleanup - Peter and Karl's standard cleanup management
- X *
- X * "cleaned up" the documentation 3/1/88
- X *
- X */
- X
- X#include <exec/types.h>
- X#include <functions.h>
- X#include <exec/memory.h>
- X#include <stdio.h>
- X
- Xstruct _clean
- X{
- X int (*function)();
- X struct _clean *next;
- X} *cleanlist = NULL;
- X
- X/* add_cleanup
- X * given a function, add it to a list of functions to call when cleanup
- X * is executed
- X */
- Xadd_cleanup(function)
- Xint (*function)();
- X{
- X struct _clean *ptr;
- X
- X ptr = AllocMem(sizeof(struct _clean), MEMF_PUBLIC);
- X if(!ptr)
- X return 0;
- X ptr->function = function;
- X ptr->next = cleanlist;
- X cleanlist = ptr;
- X}
- X
- X/* cleanup
- X * call all the functions that were passed as arguments to add_cleanup
- X * this run
- X */
- Xcleanup()
- X{
- X struct _clean *ptr;
- X int (*f)();
- X
- X fflush(stdout);
- X fflush(stderr);
- X
- X while(cleanlist)
- X {
- X /* locate the next cleanup function and get the function pointer */
- X ptr = cleanlist;
- X cleanlist = cleanlist->next;
- X f = ptr->function;
- X
- X /* cleanup must clean up after itself */
- X FreeMem(ptr, sizeof(struct _clean));
- X
- X /* execute the function */
- X (*f)();
- X
- X fflush(stdout);
- X fflush(stderr);
- X }
- X}
- X
- X/* panic - abort with an error message */
- X
- Xshort panic_in_progress = 0;
- X
- Xpanic(s)
- Xchar *s;
- X{
- X fflush(stdout);
- X fprintf(stderr,"panic: %s\n",s);
- X fflush(stderr);
- X if (!panic_in_progress)
- X {
- X cleanup();
- X exit(10);
- X }
- X fprintf(stderr,"double panic!\n");
- X}
- X
- X_abort()
- X{
- X panic("^C or other C library abort");
- X}
- END_OF_FILE
- if test 1419 -ne `wc -c <'cleanup.c'`; then
- echo shar: \"'cleanup.c'\" unpacked with wrong size!
- fi
- # end of 'cleanup.c'
- fi
- if test -f 'dumpvoice.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'dumpvoice.c'\"
- else
- echo shar: Extracting \"'dumpvoice.c'\" \(1885 characters\)
- sed "s/^X//" >'dumpvoice.c' <<'END_OF_FILE'
- X/* dumpvoice */
- X
- X#include "casio.h"
- X#include "fz1.h"
- X#include <stdio.h>
- X
- Xdumpvoice(p)
- Xstruct voicedata *p;
- X{
- X printf("wave_start_address %ld, wave_end_address %ld\n",wave_start_address,wave_end_address);
- X printf("generator_start_address %ld, generator_end_address %ld\n",generator_start_address,generator_end_addresss);
- X
- X printf("loop_style %d, sustain_loop_number %d, multi_loop_end_number %d\n",loop_style,sustain_loop_number,multi_loop_end_number);
- X
- X for (i = 0; i < 8; i++)
- X {
- X printf("loop_start_addresses[%d] %ld, loop_end_address[%d] %ld\n",i,loop_start_addresses[i],i,loop_end_addresses[i]);
- X printf("loop_cross_feed_time[%d] %ld, loop_time[%d] %ld\n",loop_cross_feed_time[i],loop_time[i]);
- X }
- X
- X printf("voice_pitch %d, frequency_offset %d, filter_Q_offset %d\n",voice_pitch,frequency_offset,filter_Q_offset);
- X
- X
- X printf("dca_envelope_sustain_point %d, dca_envelope_end_point %d\n",dca_envelope_sustain_point,dca_envelope_end_point);
- X BYTE dca_envelope_sustain_point;
- X BYTE dca_envelope_end_point;
- X BYTE dca_envelope_rate_values[NLOOPS];
- X UBYTE dca_envelope_stop_values[NLOOPS];
- X
- X BYTE dcf_envelope_sustain_point;
- X BYTE dcf_envelope_end_point;
- X BYTE dcf_rate_envelope_rate_values[NLOOPS];
- X UBYTE dcf_envelope_stop_values[NLOOPS];
- X
- X unsigned short lfo_delay_time;
- X UBYTE lfo_waveform;
- X UBYTE lfo_attack_value;
- X BYTE lfo_rate;
- X BYTE lfo_pitch_depth;
- X BYTE lfo_amplitude_depth;
- X BYTE lfo_filter_depth;
- X BYTE lfo_filter_Q_depth;
- X BYTE initial_touch_Q_follow;
- X
- X BYTE dca_keyboard_follow_depth;
- X BYTE dca_noterate_scaling_depth;
- X BYTE dcf_keyboard_follow_depth;
- X BYTE dcf_noterate_scaling_depth;
- X
- X BYTE initial_touch_dca_key_follow;
- X BYTE initial_touch_dca_rate_scaling;
- X BYTE initial_touch_dcf_key_follow;
- X BYTE initial_touch_dca_rate_scaling;
- X
- X UBYTE high_width_MIDI_code;
- X UBYTE low_width_MIDI_code;
- X UBYTE keynote_center;
- X
- X UBYTE sampling_frequency_index;
- X
- X char name[14];
- X}
- X
- X
- END_OF_FILE
- if test 1885 -ne `wc -c <'dumpvoice.c'`; then
- echo shar: \"'dumpvoice.c'\" unpacked with wrong size!
- fi
- # end of 'dumpvoice.c'
- fi
- if test -f 'fz1.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'fz1.h'\"
- else
- echo shar: Extracting \"'fz1.h'\" \(1453 characters\)
- sed "s/^X//" >'fz1.h' <<'END_OF_FILE'
- X/* Casio FZ-1 data structure definitions */
- X
- X#define NLOOPS 8
- X
- Xstruct voicedata
- X{
- X long wave_start_address;
- X long wave_end_address;
- X long generator_start_address;
- X long generator_end_address;
- X
- X short loop_style;
- X BYTE sustain_loop_number;
- X BYTE multi_loop_end_number;
- X long loop_start_addresses[NLOOPS];
- X
- X long loop_end_addresses[NLOOPS];
- X
- X short loop_cross_feed_time[NLOOPS];
- X unsigned short loop_time[NLOOPS];
- X
- X short voice_pitch; /* voice pitch with detune */
- X BYTE frequency_offset;
- X BYTE filter_Q_offset;
- X
- X BYTE dca_envelope_sustain_point;
- X BYTE dca_envelope_end_point;
- X BYTE dca_envelope_rate_values[NLOOPS];
- X UBYTE dca_envelope_stop_values[NLOOPS];
- X
- X BYTE dcf_envelope_sustain_point;
- X BYTE dcf_envelope_end_point;
- X BYTE dcf_rate_envelope_rate_values[NLOOPS];
- X UBYTE dcf_envelope_stop_values[NLOOPS];
- X
- X unsigned short lfo_delay_time;
- X UBYTE lfo_waveform;
- X UBYTE lfo_attack_value;
- X BYTE lfo_rate;
- X BYTE lfo_pitch_depth;
- X BYTE lfo_amplitude_depth;
- X BYTE lfo_filter_depth;
- X BYTE lfo_filter_Q_depth;
- X BYTE initial_touch_Q_follow;
- X
- X BYTE dca_keyboard_follow_depth;
- X BYTE dca_noterate_scaling_depth;
- X BYTE dcf_keyboard_follow_depth;
- X BYTE dcf_noterate_scaling_depth;
- X
- X BYTE initial_touch_dca_key_follow;
- X BYTE initial_touch_dca_rate_scaling;
- X BYTE initial_touch_dcf_key_follow;
- X BYTE initial_touch_dca_rate_scaling;
- X
- X UBYTE high_width_MIDI_code;
- X UBYTE low_width_MIDI_code;
- X UBYTE keynote_center;
- X
- X UBYTE sampling_frequency_index;
- X
- X char name[14];
- X}
- X
- X
- END_OF_FILE
- if test 1453 -ne `wc -c <'fz1.h'`; then
- echo shar: \"'fz1.h'\" unpacked with wrong size!
- fi
- # end of 'fz1.h'
- fi
- if test -f 'hilo.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'hilo.c'\"
- else
- echo shar: Extracting \"'hilo.c'\" \(1753 characters\)
- sed "s/^X//" >'hilo.c' <<'END_OF_FILE'
- X/* hilo - print highest and lowest sample values */
- X
- X#include <stdio.h>
- X
- Xshort buffer[512];
- X
- Xmain(argc,argv)
- Xint argc;
- Xchar *argv[];
- X{
- X FILE *fopen(), *fp;
- X short sample, i, average;
- X short blockhisample, blocklosample;
- X short grandhisample = -32768, grandlosample = 32767;
- X long grandtotal = 0, nsamples = 0;
- X long blocktotal;
- X unsigned long blockvariance, grandvariance = 0;
- X unsigned long sample_squared;
- X
- X if (argc != 2)
- X {
- X fprintf(stderr,"usage: hilo casiodumpfilename\n");
- X printf("argc %d\n",argc);
- X exit(1);
- X }
- X
- X if ((fp = fopen(argv[1],"r")) == NULL)
- X {
- X perror(argv[1]);
- X exit(2);
- X }
- X
- X if (fseek(fp,1024L,1) == -1)
- X {
- X perror(argv[1]);
- X exit(3);
- X }
- X
- X while (fread(buffer,1024,1,fp) != 0)
- X {
- X nsamples += 512;
- X
- X blockhisample = -32768;
- X blocklosample = 32767;
- X blocktotal = 0;
- X blockvariance = 0;
- X
- X for (i = 0; i < 512; i++)
- X {
- X sample = buffer[i];
- X /* printf("%4x ",(sample >> 4) & 0xf); */
- X
- X /* compute block values */
- X blocktotal += sample;
- X if (sample < blocklosample)
- X blocklosample = sample;
- X if (sample > blockhisample)
- X blockhisample = sample;
- X
- X /* compute grand values */
- X grandtotal += sample;
- X if (sample < grandlosample)
- X grandlosample = sample;
- X if (sample > grandhisample)
- X grandhisample = sample;
- X
- X /* compute variance */
- X sample_squared = ((sample / 32) * (sample / 32));
- X blockvariance += sample_squared;
- X grandvariance += sample_squared;
- X }
- X average = blocktotal/512;
- X
- X printf("512 samples: avg %d, hi %d, lo %d, variance %ld\n",average,blockhisample,blocklosample,blockvariance * 2);
- X }
- X average = grandtotal/nsamples;
- X
- X printf("totals: nsamples %ld, avg %d, hi %d, lo %d, variance %ld\n",nsamples,average,grandhisample,grandlosample,grandvariance * 2);
- X exit(0);
- X}
- END_OF_FILE
- if test 1753 -ne `wc -c <'hilo.c'`; then
- echo shar: \"'hilo.c'\" unpacked with wrong size!
- fi
- # end of 'hilo.c'
- fi
- if test -f 'hilo.uu' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'hilo.uu'\"
- else
- echo shar: Extracting \"'hilo.uu'\" \(12525 characters\)
- sed "s/^X//" >'hilo.uu' <<'END_OF_FILE'
- Xbegin 644 hilo
- XM```#\P`````````#``````````(```?$```!W`````$```/I```'Q$[Z".).;
- XM5?_62.<``#M\@`#_\#M\?___[D*M_^I"K?_F0JW_V@RM`````@`(9P``*$AZI
- XM`@I(;(&`3KH"F%!/+RT`"$AZ`A=.N@0&4$](>``!3KH<B%A/2'H"#"!M``PO>
- XM*``$3KH%R%!/*T#__&8``!H@;0`,+R@`!$ZZ`MQ83TAX``).NAQ66$](>``!K
- XM2'@$`"\M__Q.N@/>3^\`#`R`_____V8``!H@;0`,+R@`!$ZZ`J983TAX``-.R
- XMNAP@6$\O+?_\2'@``4AX!`!(;(,63KH"*$_O`!!*@&<``1@&K0```@#_YCM\A
- XM@`#_]#M\?___\D*M_^)"K?_>0FW_^&````92;?_X#&T"`/_X;```JC`M__A(;
- XMP-"`0>R#%CMP"`#_^C!M__H@"-&M_^(P+?_ZL&W_\FP```@[;?_Z__(P+?_Z?
- XML&W_]&\```@[;?_Z__0P;?_Z(`C1K?_J,"W_^K!M_^YL```(.VW_^O_N,"W_^
- XM^K!M__!O```(.VW_^O_P,&W_^B`(<B!.NA<2+P`P+?_Z2,!R($ZZ%P0B`"`?Q
- XM3KH=3BM`_]8@+?_6T:W_WB`M_];1K?_:8`#_3"(\```"`"`M_^).NA;6.T#_0
- XM]B`M_][0@"\`,&W_\B\(,&W_]"\(,&W_]B\(2'H`@DZZ`F9/[P`48`#^SB(MU
- XM_^8@+?_J3KH6G#M`__8@+?_:T(`O`#!M_^XO"#!M__`O"#!M__8O""\M_^9(`
- XM>@!U3KH"*$_O`!A"ITZZ&JI83TS?``!.74YU=7-A9V4Z(&AI;&\@8V%S:6]D:
- XM=6UP9FEL96YA;64*`&%R9V,@)60*`'(`-3$R('-A;7!L97,Z(&%V9R`E9"P@9
- XM:&D@)60L(&QO("5D+"!V87)I86YC92`E;&0*`'1O=&%L<SH@;G-A;7!L97,@R
- XM)6QD+"!A=F<@)60L(&AI("5D+"!L;R`E9"P@=F%R:6%N8V4@)6QD"@``2.<@!
- XM($'O`!0D2"\*+R\`%"\O`!1.N@W")``@`D_O``Q,WP0$3G5(YSPP)F\`'"HOO
- XM`"`D;P`H2H5F"'``3-\,/$YU=`!@-"8%8"H@4K'J``1D"B!24I)P`!`08`@OW
- XM"DZZ`A983R@`#(#_____9Q(6A%*+4X-*@V;24H*TKP`D9<8@`F"X2.<`("1ON
- XM``@@"F<>2A)G&DAL@8`O"DZZ`)9(;(&`2'H`2$ZZ`(I/[P`0+RR'%DZZ!2(D*
- XM0$J`6$]G*$H29R1(;(&`+RR'%DZZ!0I83R\`3KH`7DAL@8!(>``*3KH`$$_O\
- XM`!!,WP0`3G4Z(```2.<@("0O``PD;P`0(`IG!DIJ``QF"'#_3-\$!$YU(%*Q:
- XMZ@`$9`P@4E*2$()P`!`"8.9P`!`"+P`O"DZZ$B903V#62.<@,"9O`!`D;P`48
- XM8#0@4K'J``1D#"!24I(0@G``$`)@#G``$`(O`"\*3KH1]%!/#(#_____9@API
- XM_TS?#`1.=5*+%!-FR'``8/!(YR`@0>\`$"1(+PHO+P`02&R!:DZZ#$8D`"`"P
- XM3^\`#$S?!`1.=4CG/B`D;P`<+"\`("@O`"0@"F<``+PZ*@`,9P``M"!*T?P`!
- XM```,,!`"0._],(`(!0`.9Q1(>/__+PI.NA%T2H!03V8``(Q@7`R$`````F=4H
- XM("H`!)"2)@!O2C`%`D`8@&8X)`9*A&8<2'@``4*G$"H`#DB`2,`O`$ZZ%@209
- XM@Y2`3^\`#"`2D*H`"-"";0RT@VX(($+1TB2(8"X,A`````%F`IR#)6H`"``$_
- XM)*H`""\$+P80*@`.2(!(P"\`3KH5P$J`3^\`#&T(<`!,WP1\3G5P_V#V2.<PM
- XM,"1O`!0@"F<6<``P*@`,)@!G#`@#``IF!@@#``-G"'#_3-\,#$YU(%*QZ@`$Q
- XM90``IDJJ``AF""\*3KH3NEA/,"H`#`)``*!G,$'L@50F2'``,"L`#`*```!`2
- XM(`R```!`(&8(+PM.N@_N6$_7_````!9![(,,M\AEUB!*T?P````,,!`"0*__R
- XM,(`O*@`0+RH`"!`J``Y(@$C`+P!.N@C\)`!/[P`,;B!*@F8$<`)@`G`$($K1"
- XM_`````QR`#(0@($P@'#_8`#_7"2J``@@0M'J``@E2``$(%)2DG``$!!@`/]"*
- XM2'C__TZZ`.XO`"\O`!`O+P`03KH`"$_O`!!.=4CG/#(L;P`@)&\`)"9O`"@H4
- XM+P`L)CP```0`$!)(@$C`*@`,@````')F#B0\```0`"8\```"`&`H#(4```!WS
- XM9@@D/```$P%@&`R%````868()#P``!D!8`AP`$S?3#Q.=5**$!)(@`Q``"MFE
- XM#!`J``%(@`Q``&)G#!`22(`,0`!B9@I2B@C#``0(@@`,$!)(@`Q``"MF&B`"\
- XM"(```"0`",(``2`#`H#___G_)@`(PP`+(`YG#"\"+PY.N@8.*`!03TJ$;90,;
- XMA````!1LC!=$``XW0P`,(`M@@DCG`"!![(%4)$A*:@`,9QC5_````!9![(,,K
- XMM<AF"'``3-\$`$YU8.)":@`40I)"J@`$0JH`""`*8.8`3F\@<W5C:"!F:6QE'
- XM(&]R(&1I<F5C=&]R>0!!<F<@;&ES="!T;V\@;&]N9P!"860@9FEL92!D97-CT
- XM<FEP=&]R`$YO="!E;F]U9V@@;65M;W)Y`$9I;&4@97AI<W1S`$EN=F%L:60@7
- XM87)G=6UE;G0`1FEL92!T86)L92!O=F5R9FQO=P!4;V\@;6%N>2!O<&5N(&9IG
- XM;&5S`$YO="!A(&-O;G-O;&4`4&5R;6ES<VEO;B!D96YI960`22]/(&5R<F]R,
- XM`$YO('-P86-E(&QE9G0@;VX@9&5V:6-E`%)E<W5L="!T;V\@;&%R9V4`07)GW
- XM=6UE;G0@;W5T(&]F(&1O;6%I;@!%>&5C(&9O<FUA="!E<G)O<@!296%D+6]NL
- XM;'D@9FEL92!S>7-T96T`0W)O<W,M9&5V:6-E(')E;F%M90!.;W1H:6YG('1O#
- XM(')E860`2.<@`"0O``A*@FT:#((````2;A(@`N6`0>R``B`P"`!,WP`$3G5!:
- XM^@`&(`A@\E5N:VYO=VX@97)R;W(`*D]A<D/L@Q9%[(,6M<EF#C(\`19K"'0`P
- XM(L)1R?_\*4^'&BQX``0I3H<>2.>`@`@N``0!*6<02_H`"$ZN_^)@!D*G\U].Y
- XM<T/Z`").KOYH*4"'(F8,+CP``X`'3J[_E&`&*D].N@`:4$].=61O<RYL:6)R[
- XM87)Y`$GY``!__DYU2.<`($CG``(B/``!```P+(,,P?P`!BQLAQY.KO\Z3-]`X
- XM`"E`AR9F'DCG`0:;S2X\``$``"QLAQY.KO^43-]@@"YLAQI.=2!LAR9":``$?
- XM(&R')C%\``$`$"!LAR8Q?``!``H@;(<:("R'&I"H``10@"E`ARH@;(<J(+Q-.
- XM04Y82.<``I/)+&R''DZN_MI,WT``)$!*J@"L9SPO+P`,+R\`#"\*3KH!#"E\>
- XM`````8<N(&R')EB(,!``0(``,(`@;(<FT?P````*,!``0(``,(!/[P`,8&I(;
- XMYP`"($K1_````%PL;(<>3J[^@$S?0`!(YP`"($K1_````%PL;(<>3J[^C$S?0
- XM0``I0(<R(&R',DJH`"1G)DCG``(@;(<R(&@`)"(0+&R'(DZN_X),WT``+RR'I
- XM,B\*3KH$Z%!/*6R',H<V2.<``BQLAR).KO_*3-]``"!LAR8@@$CG``(L;(<BV
- XM3J[_Q$S?0``@;(<F(4``!F<D2.<@`B0\```#[4'Z`#0B""QLAR).KO_B3-]`8
- XM!"!LAR8A0``,+RR'-B\LASI.NO4&4$\O`$ZZ$=183TS?!`!.=2H`2.<X,B8O-
- XM`!PH+P`@)F\`)"!#2J@`K&<4($,@*`"LY8`L0"`N`!#E@"1`8`0D;(,.$!)(&
- XM@$C`T(14@"E`ASY(YP`"<@`@+(<^+&R''DZN_SI,WT``*4"'0F8&3-],'$YUC
- XM$!)(@$C`)``O`B!*4H@O""\LAT).N@3R2'H!2B!"T>R'0B\(3KH.ZB\$+PLOL
- XM+(="3KH!-"!LAT)","@`*7P````!ASHD0M7LAT)2BB9*3^\`(!`22(!(P"0`X
- XM#(`````@9R`,@@````EG&`R"````#&<0#((````-9P@,@@````IF!%**8,P,Z
- XM$@`@;78,$@`B9BI2BA`:2(!(P"0`9QP6P@R"````(F80#!(`(F8$4HI@!D(KY
- XM__]@`F#:8#@0&DB`2,`D`&<L#((````@9R0,@@````EG'`R"````#&<4#((`9
- XM```-9PP,@@````IG!!;"8,I"&TJ"9@)3BE*LASI@`/]20A-(YP`"<@`@+(<ZH
- XMY8!8@"QLAQY.KO\Z3-]``"E`AS9F"$*LASI@`/[0=``D;(="8!H@`N6`(&R'L
- XM-B&*"``O"DZZ"-C5P%**6$]2@K2LASIMX"`"Y8`@;(<V0K`(`&``_I@@`$SO_
- XM`P``!"`((B\`#$H89OQ3B!#95\G__`2!``$``&KR0B!.=2\O``A(>`,!+R\`^
- XM#&$&3^\`#$YU2.<^,BQO`"0H+P`H3KH/2"9LAR9T`&`0<@8@`DZZ$;Q*LP@`3
- XM9Q!2@C!L@PRQPF[H=@A@``%."`0`"6=>2.<@`G3_(B\`!"QLAR).KO^L3-]`R
- XM!"H`9T1(YP`"(@4L;(<B3J[_IDS?0`!(YP`"(A<L;(<B3J[_N$S?0`!*@&8<3
- XM2.<``BQLAR).KO]\3-]``"8`#(````#-9@``ZDCG(`(D/````^TB+P`$+&R'X
- XM(DZN_^),WT`$)$`@"F8``*0(!``(9@9V`6```+Q(YR`")#P```/N(B\`!"QLH
- XMAR).KO_B3-]`!"1`2H!F%DCG``(L;(<B3J[_?$S?0``F`&```(9(YP`"<"%#$
- XM^@#`+&R''DZN_=A,WT``+`!G%$CG``(B1BQLAQY.KOYB3-]``&`P2.<P`G8!?
- XM0?H`GB0((@HL;(<B3J[_T$S?0`Q(YS`"=O]T`"(*+&R'(DZN_[Y,WT`,8#`@+
- XM!`*````%``R````%`&8@2.<``B(*+&R'(DZN_]Q,WT``=@4I0X<6</],WTQ\H
- XM3G5R!B`"3KH01B>*"`!R!B`"3KH0.C>$"`0(!``+9Q9(YS`"=@%T`"(*+&R'2
- XM(DZN_[Y,WT`,(`)@PF1O<RYL:6)R87)Y````2.<P("0O`!!.N@UX<@8@`DZZ0
- XM#_0D0-7LAR9*@FT,,&R##+'";P1*DF80*7P````#AQ9P_TS?!`Q.=3`J``1(5
- XMP`*``````PR``````68,*7P````&AQ9P_V#:2.<P`B8O`"0D+P`@(A(L;(<BW
- XM3J[_UDS?0`PF``R`_____V882.<``BQLAR).KO]\3-]``"E`AQ9P_V">(`-@^
- XMFDCG,#(L;P`82.<``G``0_H`UBQLAQY.KOW83-]``"E`AT9F!DS?3`Q.=4CGB
- XM``(@;P`@(&@`)"!H``0L;(=&3J[_LDS?0``D0$J`9WY(YP`"0_H`H2!J`#8LT
- XM;(=&3J[_H$S?0``D`&=02.<@`B0\```#[2(7+&R'(DZN_^),WT`$)D!*@&<R*
- XM(`OE@"8`($,M:``(`*0M2P"<2.<@`B0\```#[4'Z`%8B""QLAR).KO_B3-]`3
- XM!"U``*!(YP`"($HL;(=&3J[_IDS?0`!(YP`"(FR'1BQLAQY.KOYB3-]``$*L;
- XMAT9@`/]`:6-O;BYL:6)R87)Y`%=)3D1/5P`J`$SO`P``!"`((B\`#&`"$-E7C
- XMR?_\9PP$@0`!``!J\$YU0AA1R?_\!($``0``:O).=4Y5_?1(YS\R)FT`""QM6
- XM`!!^`"1M``P6$F8*(`=,WTS\3EU.=5**#`,`)6=")`<@4['K``1D#"!34I,0:
- XM@W``$`-@#G``$`,O`"\+3KH%+E!/#(#_____9P`$9%*"%A)F!"`"8+A2B@P#<
- XM`"5FPBX">``K?````"#__!8:<``0`V!F",0``R",0``6#L",0``F#F",0`'
- XM`V#@6(XD+O_\2H)L!@C$``!$@A8:8%8K?````##__'0`8!@@`N>`<@`2`]"!+
- XMT(+0@B0`!((````P%AIP`!`#0>R`4Q`P``!(@`@```)FU&`<!$``(&>@5T!GB
- XMHE]`9Z130&>.54!GA%=`9ZQ@LBM"__@D/```?<8,`P`N9EP6&@P#`"IF%%B.?
- XM)"[__$J";`8D/```?<86&F`P=`!@&"`"YX!R`!(#T('0@M"")``$@@```#`6/
- XM&G``$`-![(!3$#```$B`"````F;4#((``'W&9P@K?````"#__"H"#`,`:&8&Z
- XM",0`!V`6#`,`;&8&",0`!F`*#`,`3&8&",0`"!8:*TH`#'``$`-@``&.8``#-
- XM&@@$``=G"EB.(&[__#"'8!@(!``&9PI8CB!N__P@AV`(6(X@;O_\((=T`&``G
- XM`:A8CB1N__PO"DZZ`P@D``R%``!]QEA/9P:TA6\")`5@``&&6(X6+O__0>W]!
- XM^"1($(-T`6```7)T"&`0`$0`2'9X=!!@!@C$``1T"@P#`%AF"$'Z`IX@"&`&;
- XM0?H"IR`(*T#]]`@$``9G"%B.+"[__&`4"`0`!&<(6(XL+O_\8`98CBPN__P([
- XM!``$9PI*AFP&1(8(Q``%0>W_^"1(#(4``'W&9@)Z`4J&9@1*A6<<(@(@!DZZ\
- XM!:P@;?WT%3`(`"("(`9.N@6H+`!FY$'M__B1RB0("`0``V=N#`,`;V842H)GL
- XM"@P2`#!G"+2%;00J`E*%8%0,`P!X9P8,`P!89DA*@F=$#!(`,&<^M(5L$$'M^
- XM_?JQRF0(%3P`,%*"8.P(!```9AP,K0```##__&82(`)4@+"M__AL""HM__A5*
- XMA6#*%0,5/``P5(*TA6P00>W]^+'*9`@5/``P4H)@[&!,!$``)6<`_L@$0``SW
- XM9P#^V`1```MG`/ZR4T!G`/[.6T!G`/[(6T!G`/Y04T!G`/ZN4T!G`/ZL5T!G)
- XM`/YL54!G`/ZN5T!G`/Z@8`#^*@@$``1G*`@$``5G!A4\`"U@&@@$``%G!A4\6
- XM`"M@#@@$``)G!A4\`"!@`E."4H+>@@@$``!F``"0#*T````P__QF0@@$``1GU
- XM/#`$`D``)F<T(%.QZP`$9`X@4U*3$)IP`!`J__]@#G``$!HO`"\+3KH!DE!/-
- XM#(#_____9P``R%.M__A3@F`T(%.QZP`$9!`@4U*3$*W__W``$"W__V`0<``0,
- XM+?__+P`O"TZZ`5A03PR`_____V<``(Y2AR`M__A3K?_XL()NP"H"(`)3@DJ`R
- XM9RX@4['K``1D#B!34I,0FG``$"K__V`.<``0&B\`+PM.N@$24$\,@/____]G>
- XM2*"`0``&<\)`5@+"!3L>L`!&0.(%-2DQ"\`"!P`'`@8`Q(>``@+PM.N@#<)
- XM4$\,@/____]G$E*'("W_^%.M__BP@F[(8`#[6'#_8`#[7#`Q,C,T-38W.#E!#
- XM0D-$148`,#$R,S0U-C<X.6%B8V1E9@`@;P`$(`A*&&;\4TB1P"`(3G5(YP`@;
- XM)&\`""`*9D1![(%4)$A*:@`,9R8P*@`,`D`""&8<2'C__R\*3KH`6@R`____`
- XM_U!/9@AP_TS?!`!.==7\````%D'L@PRUR&7&<`!@Z$AX__\O"DZZ`"Q03V#:T
- XM2.<`($'L@50D2"\*3KH!OEA/U?P````60>R##+7(9>I,WP0`3G5(YSP@)&\`C
- XM&"@O`!P@"F<``9`T*@`,9P`!B`@"``EF``&`"`(``V8``7@@2M'\````##`0P
- XM`D#O_3"`2JH`"&8<#(3_____9@AP`$S?!#Q.=2\*3KH"R#0J``Q83P@"``YF.
- XM-"!2L>H`"&,>2'@``2`2D*H`!"\`$"H`#DB`2,`O`$ZZ!$Q/[P`,)*H`""!JS
- XM`!#1TB5(``0,A/____]F!'8`8`(6!"`2D*H`""H`,`("0`"@9TX,A/____]GF
- XM(B!24I(0@R!*T?P````,,!`(P``.,(`T`$'Z_P0I2(=*4H4,A/____]G#`P#M
- XM``IG!KJJ`!!E!'C_8`PE4@`$<``0`V``_TH(`@`.9S!*A6<<+P4O*@`($"H`N
- XM#DB`2,`O`$ZZ!':PA4_O``QF7B!*T?P````,,!`(@``.,(`,A/____]F$B2JM
- XM``@E:@`(``1P`!`#8`#^^D'Z_H8I2(=*($K1_`````PP$`C```XP@"2J``@@^
- XM:@`0T=(E2``$(%)2DA"#<``0`V``_L8@2M'\````##`0",```C"`)6H`"``$V
- XM)*H`"'#_8`#^IDY5__9(YS@@)&T`"'0`(`IG!DIJ``QF"G#_3-\$'$Y=3G4(L
- XM*@`!``QF"B\*3KK]J(2`6$\0*@`.2(!(P"\`3KH&B(2`""H````-6$]G"B\J)
- XM``A.N@&66$]*:@`49TY(>@!J2&W_]TZZ`E`X*@`4=@!03W``,`1R"DZZ`'P&Q
- XM@````#!R!Y*#0>W_]Q&`&`!(Q(G\``I2@PR#````!6W40BW__TAM__=.N@,2%
- XM6$]"DD*J``1"J@`(0FH`#$J"9P9P_V``_UAP`&``_U)435``2.=(`$*$2H!JY
- XM!$2`4D1*@6H&1($*1``!83Y*1&<"1(!,WP`22H!.=4CG2`!"A$J`:@1$@%)$@
- XM2H%J`D2!81H@`6#8+P%A$B`!(A]*@$YU+P%A!B(?2H!.=4CG,`!(04I!9B!((
- XM038!-`!"0$A`@,,B`$A`,@*"PS`!0D%(04S?``Q.=4A!)@$B`$)!2$%(0$)`[
- XM=`_0@-.!MH%B!)*#4D!1RO_R3-\`#$YU2.<@("1O``QT01`J``Y(@$C`+P!.)
- XMN@$Z2H!83V<"="$E?```!```$$AX!`!.N@#&)4``"%A/9A@E?`````$`$"!*9
- XMT?P````/)4@`"#0\`(`@2M'\````#'``,!`R`DC!@($P@"5J``@`!"2J``A,?
- XMWP0$3G5(YP`PE\LD;(=.8!`@2E"((F\`#+/(9PXF2B12(`IF[$S?#`!.=2`+6
- XM9P0FDF`$*5*'3DCG``(@*@`$4(`B2BQLAQY.KO\N3-]``*.<`,"1LATY@[
- XM'"922.<``B`J``10@")*+&R''DZN_RY,WT``)$L@"F;@0JR'3DS?#`!.=4CGK
- XM("`D+P`,2H)F"'``3-\$!$YU2.<``G(`(`)0@"QLAQY.KO\Z3-]``"1`2H!F%
- XM!'``8-I!^O^6*4B'4B2LATXE0@`$*4J'3B`*4(!@P$SO`P``!"`($-EF_$YUR
- XM2.<@("0O``QR!B`"3KH$3"1`U>R')DJ";0PP;(,,L<)O!$J29A`I?`````.'I
- XM%G#_3-\$!$YU2.<``G(&(`).N@0:(&R')B(P"``L;(<B3J[_*$S?0`!*@&<$#
- XM<`%@`G``8,Y(YS`@)"\`$$ZZ`6IR!B`"3KH#YB1`U>R')DJ";0PP;(,,L<)OU
- XM!$J29A`I?`````.'%G#_3-\$#$YU2.<P`B`O`"13@"8`)"\`("(2+&R'(DZNY
- XM_[Y,WT`,)@`,@/____]F&$CG``(L;(<B3J[_?$S?0``I0(<6</]@NDCG,`)V:
- XM`'0`(A(L;(<B3J[_ODS?0`Q@HDCG``(B+P`(+&R'(DZN_[A,WT``2H!F&$CG[
- XM``(L;(<B3J[_?$S?0``I0(<6</].=7``8/I(YS`@)"\`$$ZZ`*1R!B`"3KH#:
- XM("1`U>R')DJ";0PP;(,,L<)O!$J29A`I?`````.'%G#_3-\$#$YU,"H`!`)`L
- XM``-F#"E\````!H<6</]@Y`@J``,`!&<62.<P`G8!=``B$BQLAR).KO^^3-]`+
- XM#$CG,`(F+P`D)"\`("(2+&R'(DZN_]!,WT`,)@`,@/____]F&$CG``(L;(<BN
- XM3J[_?$S?0``I0(<6</]@BB`#8(9(YR``2.<``B(\```0`'``+&R''DZN_LY,Y
- XMWT``)``(```,9Q)*K(<N9@@@`DS?``1.=4ZZ``9P`R2.<P`G8$0?H`+B0(]
- XM+P,O`BQLAR).KO_$(@`D'R8?+&R'(DZN_]!,WT`,2'@``4ZZ``I83TYU7D,*X
- XM`$JLAU9G%"!LAU8@:``$3I`@;(=6*5"'5F#F2JR'2F<&(&R'2DZ0+R\`!$ZZ_
- XM``983TYU2.<P`"8O``Q*K(<F9S)T`&`*+P).N@%P6$]2@C!L@PRQPF[N2.<`8
- XM`C`L@PS!_``&(FR')BQLAQY.KO\N3-]``$JLAU)G!B!LAU).D$JL@Q)G%$CGP
- XM``(B+(,2+&R'(DZN_Z9,WT``2JR'6F<((&R'6B"LAUY*K(=B9Q1(YP`"(FR'V
- XM8BQLAQY.KOYB3-]``$JLAV9G%$CG``(B;(=F+&R''DZN_F),WT``2JR':F<46
- XM2.<``B)LAVHL;(<>3J[^8DS?0`!*K(=N9Q1(YP`"(FR';BQLAQY.KOYB3-]`2
- XM`$CG``8L>``$""X`!`$I9Q!+^@`(3J[_XF`&0J?S7TYS*E]*K(<R9CQ*K(="=
- XM9S1(YP`"("R'/B)LAT(L;(<>3J[_+DS?0`!(YP`"("R'.N6`6(`B;(<V+&R'J
- XM'DZN_RY,WT``8"1(YP`"+&R''DZN_WQ,WT``2.<``B)LAS(L;(<>3J[^ADS?F
- XM0`!(YP`"(FR'(BQLAQY.KOYB3-]``"`#+FR'&DYU3-\`#$YU2.<@("0O``QR'
- XM!B`"3KH`2B1`U>R')DJ";0PP;(,,L<)O!$J29A`I?`````.'%G#_3-\$!$YU>
- XM,"H`!`)`@`!F$DCG``(B$BQLAR).KO_<3-]``$*2<`!@V$CG<``T`<3`)@%(#
- XM0\;`2$-"0]2#2$#`P4A`0D#0@DS?``Y.=0`````#[`````$````!```)7```G
- XM``````/R```#Z@```,4```=:```'6P``!W4```>'```'FP``!ZT```>Y```'1
- XMR@``!]X```?R```(````"!(```@<```(-```"$4```A<```(;@``"(0```B8]
- XM````$P`@("`@("`@("`P,#`P,"`@("`@("`@("`@("`@("`@()!`0$!`0$!`S
- XM0$!`0$!`0$`,#`P,#`P,#`P,0$!`0$!`0`D)"0D)"0$!`0$!`0$!`0$!`0$!\
- XM`0$!`0$!0$!`0$!`"@H*"@H*`@("`@("`@("`@("`@("`@("`@)`0$!`(```*
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM``````(````````!```````````````````$``$``````0``````````````)
- XM````!``"``````$`````````````````````````````````````````````'
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````````````````````````````
- XM`````````````````````````````````````!0``````````````^P````36
- XM```````````````$````"`````P````0````%````!@````<````(````"0`T
- XM```H````+````#`````T````.````#P```!`````1````$@````````#\@``M
- X*`^L````!```#\C``4
- X``
- Xend
- Xsize 8920
- END_OF_FILE
- if test 12525 -ne `wc -c <'hilo.uu'`; then
- echo shar: \"'hilo.uu'\" unpacked with wrong size!
- fi
- # end of 'hilo.uu'
- fi
- if test -f 'prototypes.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'prototypes.h'\"
- else
- echo shar: Extracting \"'prototypes.h'\" \(649 characters\)
- sed "s/^X//" >'prototypes.h' <<'END_OF_FILE'
- X
- X/* casio.c */
- Xvoid midi_cleanup(void);
- XUBYTE its_an_fz1_message(UBYTE *msg, int requested_channel);
- Xvoid commune_with_fz1(struct MSource *source, struct MDest *dest, int channel, int outfd);
- Xvoid send_fz(struct MSource *source, int channel_id, int message_id);
- Xint calc_checksum(struct FZ1_Message *p);
- Xvoid capture(struct FZ1_Message *p, int outfd);
- Xmain(int argc,char *argv[]);
- Xvoid _abort(void);
- Xvoid dump_open(struct FZ1_Message *p);
- X
- X/* timer.c */
- Xstruct timerequest *CreateTimer(int unit);
- Xint DeleteTimer(struct timerequest *tr);
- Xvoid trash_timer(void);
- Xvoid init_timer(void);
- Xvoid start_timeout_timer(void);
- Xvoid abort_timeout_timer(void);
- END_OF_FILE
- if test 649 -ne `wc -c <'prototypes.h'`; then
- echo shar: \"'prototypes.h'\" unpacked with wrong size!
- fi
- # end of 'prototypes.h'
- fi
- if test -f 'timer.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'timer.c'\"
- else
- echo shar: Extracting \"'timer.c'\" \(1620 characters\)
- sed "s/^X//" >'timer.c' <<'END_OF_FILE'
- X/* casio reader timer stuff */
- X
- X#include <stdio.h>
- X#include <exec/types.h>
- X#include <functions.h>
- X#include <intuition/intuition.h>
- X#include <devices/timer.h>
- X#include <devices/audio.h>
- X
- X#include "prototypes.h"
- X
- Xstruct timerequest *timer_request;
- X
- Xstruct Device *TimerBase;
- X
- Xstruct timerequest *CreateTimer(int unit)
- X{
- X long error;
- X
- X register struct MsgPort *timerport;
- X register struct timerequest *timermsg;
- X
- X timerport = CreatePort(0L, 0L);
- X
- X if (!timerport)
- X return 0;
- X
- X timermsg = (struct timerequest *)CreateExtIO(timerport, (long)sizeof(struct timerequest));
- X
- X if (!timermsg)
- X {
- X DeletePort(timerport);
- X return 0;
- X }
- X
- X error = OpenDevice(TIMERNAME, (long)unit, timermsg, 0L);
- X if (error)
- X {
- X DeleteTimer(timermsg);
- X return 0;
- X }
- X return timermsg;
- X}
- X
- XDeleteTimer(register struct timerequest *tr)
- X{
- X register struct MsgPort *tp;
- X
- X if (tr)
- X {
- X tp = tr->tr_node.io_Message.mn_ReplyPort;
- X if(tp)
- X DeletePort(tp);
- X CloseDevice((struct IORequest *)tr);
- X DeleteExtIO((struct IORequest *)tr);
- X }
- X}
- X
- Xvoid trash_timer(void)
- X{
- X AbortIO((struct IORequest *)timer_request);
- X TimerBase = (struct Device *)-1;
- X DeleteTimer(timer_request);
- X}
- X
- Xvoid init_timer(void)
- X{
- X if (!(timer_request = CreateTimer(UNIT_MICROHZ)))
- X panic("Can't create timer.");
- X
- X TimerBase = timer_request->tr_node.io_Device;
- X add_cleanup(trash_timer);
- X}
- X
- Xvoid start_timeout_timer(void)
- X{
- X timer_request->tr_node.io_Command = TR_ADDREQUEST;
- X
- X timer_request->tr_time.tv_secs = 3;
- X timer_request->tr_time.tv_micro = 0;
- X
- X SendIO((struct IORequest *)timer_request);
- X}
- X
- Xvoid abort_timeout_timer(void)
- X{
- X AbortIO((struct IORequest *)timer_request);
- X}
- END_OF_FILE
- if test 1620 -ne `wc -c <'timer.c'`; then
- echo shar: \"'timer.c'\" unpacked with wrong size!
- fi
- # end of 'timer.c'
- fi
- echo shar: End of archive 1 \(of 1\).
- cp /dev/null ark1isdone
- MISSING=""
- for I in 1 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have the archive.
- rm -f ark[1-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
- --
- Mail submissions (sources or binaries) to <amiga@uunet.uu.net>.
- Mail comments to the moderator at <amiga-request@uunet.uu.net>.
- Post requests for sources, and general discussion to comp.sys.amiga.misc.
-